在.NET中调用的动态拦截(Dynamic interception of calls in .NE

2019-07-03 17:16发布

我好奇地学习,如果.NET支持任何形式的在运行时的方法调用(或属性调用)的动态拦截。 也就是说,你可以拦截没有静态编译信息一个对象的调用,如接口(沿CORBA DII(的行链接文本 )或COM的IDispatch)。

如果没有,会在这方面C#4.0的帮助新的“动态类型对象”功能。

Answer 1:

没有什么内置的,可以让你拦截的对象,你无法控制的实例。 同样,也将是这个在即将到来的.NET 4.0没有新的设施。

如果你能控制实例:

  1. 如果你的对象可以是MarshalByRef可以使用RealProxy 。
  2. 你可以使用相当多的IOC容器,例如。 李林甫 , 城堡动态代理
  3. 你可以使用类似的工具PostSharp , 单塞西尔或微软CCI与拦截作为后编译步骤来重写你的组件。

如果你无法控制的实例

  1. 您可以使用ICorDebug - 。净调试API的这是真的很难使用和沉重。
  2. 您可以使用ICorProfiler - 。净剖析其中也相当复杂使用的API。

或者,你可以看看像IronRuby的,它有一个内置的动态语言alias_methoddefine_method善良(它允许您重新定义变量),所以在拦截出炉。


.NET 4.5推出一种方法ReJIT其提供了方法拦截另一个钩(提供您没有运行并行/ BG GC和方法并不内联)方法



Answer 2:

退房的政策注入应用程序块的企业库 。



Answer 3:

看看.NET 4.0动态对象......这能行。

http://www.ontheblog.net/CMS/Home/tabid/36/EntryID/77/Default.aspx



文章来源: Dynamic interception of calls in .NET