EF如何生成代理类

How does EF Generate Proxy classes

我正在尝试构建一个工作流引擎来包装我的服务层,并想探索 EF 用于生成透明代理的方法 类 但我似乎无法从GitHub / CodePlex 上的代码实际上是如何工作的。

有人能给我指出正确的方向/解释这个过程吗?

它是在运行时还是在编译时执行此操作?

...

主要区别:

EF 对属性感兴趣并跟踪它们的变化,我对将方法调用包装到任何类型的实例感兴趣,这些实例具有一些逻辑,可以调用我的工作流引擎 "raise an event"。

好的,经过一些挖掘后,它看起来像是在编译时使用 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$ 的荣誉:)