使用NHibernate时,可以使用虚拟方法定义实体,NHibernate将创建一个跟踪对象更改的代理对象。
在Moq中,框架将神奇地从接口或基类创建派生类型。例如:
var mock = new Mock<IFoo>();
IFoo magicFoo = mock.Object;这真的很酷。这些框架是如何实现的?它们是否使用反射、泛型、某种动态编译或其他什么?
我意识到这两个项目都是开源项目,我可以对代码进行搜索,但我想在这里找到一个简明的答案--可能还有其他选择。
发布于 2009-08-14 01:18:21
然而,Moq使用了,只是认为它值得添加,还有许多其他允许您创建代理对象的框架。在NHibernate 2.1中,它还允许您使用以下任何一种:
这些项目中的每一个都简要地解释了它们是如何实现这一目标的,希望这就是你正在寻找的答案。
发布于 2009-08-14 00:58:57
它们使用反射(确定需要生成什么)和反射发出(动态生成派生类,并为方法释放IL )的组合。.NET提供了这两个API(反射和反射发出)。
发布于 2009-08-14 00:36:05
卡塞尔的DynamicProxy2课程。
https://stackoverflow.com/questions/1275433
复制相似问题