EF如何生成代理类

3
我正在考虑构建一个工作流引擎来包装我的服务层,并希望探索EF采用的透明代理类生成方法,但我似乎无法从GitHub / CodePlex上的代码中弄清楚它的实际工作方式。
有人能指点一下我正确的方向/解释这个过程吗?
它是在运行时还是编译时完成的?
...
关键区别:
EF对属性感兴趣并跟踪它们的更改,而我对包装任何类型实例的方法调用感兴趣,使用一些逻辑调用我的工作流引擎来“触发事件”。

1
对于一般的代理,可以查看Castle的DynamicProxy - poke
有趣的,值得深入挖掘... - War
1个回答

2
好的,经过一些调查后,看起来它正在使用T4模板在编译时导出类型,然后使用拦截在运行时基本上替换原始对象的请求为生成的代理类型。
代码的关键部分...
T4模板在这里:
http://entityframework.codeplex.com/SourceControl/latest#src/PowerTools/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt
拦截代码在这里:
http://entityframework.codeplex.com/SourceControl/latest#src/EntityFramework/Infrastructure/Interception/PropertyInterceptionContext.cs
简而言之,应该可以使用T4模板在自己的代码中再现类似的行为,然后让我的服务工厂使用命名约定查找代理类型。
相当干净,M$在这方面做得很好:)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接