Moq和NHibernate如何自动创建派生类型?

时间:2009-08-14 00:32:23

标签: c# .net nhibernate moq

使用NHibernate时,您可以使用虚拟方法定义您的entites,NHibernate将创建一个跟踪对象更改的代理对象。

在Moq中,框架将神奇地从接口或基类创建派生类型。例如

var mock = new Mock<IFoo>();
IFoo magicFoo = mock.Object;

这真的很酷。这些框架如何做到这一点?他们是使用反射,泛型,某种动态编译还是其他什么?

我意识到这些都是开源项目,我可以通过代码进行探讨,但我想在这里有一个简明的答案 - 可能有替代方案。

3 个答案:

答案 0 :(得分:3)

Moq使用城堡动态代理,但是,只是认为值得添加,还有许多其他框架允许您创建代理对象。从NHibernate 2.1开始,它还允许您使用以下任何一种方法:

这些项目中的每一项都简要说明了他们如何实现这一目标,希望这是您正在寻找的答案。

答案 1 :(得分:2)

它们结合使用反射(以确定需要生成的内容)和反射 - 发射(动态生成派生类,并为方法发出IL)。 .NET提供了这两种API(反射和反射 - 发射)。

答案 2 :(得分:1)

Castle的DynamicProxy2类。