当使用NHibernate,你的虚方法定义的entites,和NHibernate将创建跟踪更改的对象的代理对象。
在Moq的,该框架将神奇创建从一个接口或基类派生类型。 例如
var mock = new Mock<IFoo>();
IFoo magicFoo = mock.Object;
这是真的很酷。 如何将这些框架做呢? 他们是否使用反射,泛型,某种动态编译,还是其他什么东西的?
我知道这些都是开源项目,我可以通过代码洞穴探险,但我想在这里有一个简洁的答案-可能替代品。
当使用NHibernate,你的虚方法定义的entites,和NHibernate将创建跟踪更改的对象的代理对象。
在Moq的,该框架将神奇创建从一个接口或基类派生类型。 例如
var mock = new Mock<IFoo>();
IFoo magicFoo = mock.Object;
这是真的很酷。 如何将这些框架做呢? 他们是否使用反射,泛型,某种动态编译,还是其他什么东西的?
我知道这些都是开源项目,我可以通过代码洞穴探险,但我想在这里有一个简洁的答案-可能替代品。
起订量使用城堡动态代理,但是,我想这一定是值得加入也有一些其他的框架,允许您创建的代理对象。 由于NHibernate的2.1还允许您使用以下的任何一种:
每个项目都有他们是如何做到这一点,这是希望的答案你要找的那种简单的解释。
他们使用反射的组合(找出需要产生什么)和反射发射(动态生成的派生类,以及用于这些方法的发光IL)。 .NET既提供这些API(反射和反射发射)的。
城堡的DynamicProxy2类。