使用 NHibernate 时,您可以使用虚拟方法定义实体,NHibernate 将创建一个代理对象来跟踪对象的更改。
在 Moq 中,框架会神奇地从接口或基类创建派生类型。例如
var mock = new Mock<IFoo>();
IFoo magicFoo = mock.Object;
这真的很酷。这些框架是如何做到的呢?他们使用反射、泛型、某种动态编译还是其他什么?
我意识到这些都是开源项目,我可以深入研究代码,但我想在这里得到一个简洁的答案 - 可能有替代方案。
Moq 使用 Castle 动态代理,但是,我认为值得添加还有许多其他框架允许您创建代理对象。从 NHibernate 2.1 开始,它还允许您使用以下任意一项:
- 城堡动态代理 http://www.castleproject.org/projects/dynamicproxy
- 林富框架 http://www.codeproject.com/KB/cs/LinFuPart1.aspx
- Spring.NET http://www.springframework.net/doc-latest/reference/html/aop.html#aop-proxyfactoryobject
每个项目都简要解释了它们如何实现这一目标,希望这正是您正在寻找的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)