使用NHibernate时,您可以使用虚拟方法定义您的entites,NHibernate将创建一个跟踪对象更改的代理对象。
在Moq中,框架将神奇地从接口或基类创建派生类型。例如
var mock = new Mock<IFoo>();
IFoo magicFoo = mock.Object;
这真的很酷。这些框架如何做到这一点?他们是使用反射,泛型,某种动态编译还是其他什么?
我意识到这些都是开源项目,我可以通过代码进行探讨,但我想在这里有一个简明的答案 - 可能有替代方案。
答案 0 :(得分:3)
Moq使用城堡动态代理,但是,只是认为值得添加,还有许多其他框架允许您创建代理对象。从NHibernate 2.1开始,它还允许您使用以下任何一种方法:
这些项目中的每一项都简要说明了他们如何实现这一目标,希望这是您正在寻找的答案。
答案 1 :(得分:2)
它们结合使用反射(以确定需要生成的内容)和反射 - 发射(动态生成派生类,并为方法发出IL)。 .NET提供了这两种API(反射和反射 - 发射)。
答案 2 :(得分:1)
Castle的DynamicProxy2类。