如何起订量和NHibernate自动创建派生类型?(How do Moq and NHibernat

2019-09-23 14:56发布

当使用NHibernate,你的虚方法定义的entites,和NHibernate将创建跟踪更改的对象的代理对象。

在Moq的,该框架将神奇创建从一个接口或基类派生类型。 例如

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

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

我知道这些都是开源项目,我可以通过代码洞穴探险,但我想在这里有一个简洁的答案-可能替代品。

Answer 1:

起订量使用城堡动态代理,但是,我想这一定是值得加入也有一些其他的框架,允许您创建的代理对象。 由于NHibernate的2.1还允许您使用以下的任何一种:

  • 城堡动态代理
  • 李林甫框架
  • Spring.NET

每个项目都有他们是如何做到这一点,这是希望的答案你要找的那种简单的解释。



Answer 2:

他们使用反射的组合(找出需要产生什么)和反射发射(动态生成的派生类,以及用于这些方法的发光IL)。 .NET既提供这些API(反射和反射发射)的。



Answer 3:

城堡的DynamicProxy2类。



文章来源: How do Moq and NHibernate automatically create derived types?