动态拦截.NET中的调用

我很想知道.NET是否支持在运行时进行任何forms的方法调用(或属性调用)动态拦截。 也就是说,您是否可以在没有静态编译信息(如接口(沿着CORBA DII( 链接文本 )或COM的IDispatch的行)的情况下拦截对对象的调用)。

如果没有,C#4.0中新的“动态类型对象”function是否有助于此。

没有任何内置function可以拦截您无法控制实例化的对象。 同样,在即将推出的.net 4.0中也没有新设施。

如果你可以控制实例化:

  1. 如果您的对象可以是MarshalByRef,则可以使用RealProxy 。
  2. 您可以使用相当多的IOC容器,例如。 LinFu , Castle动态代理
  3. 您可以使用像PostSharp , Mono Cecil或Microsoft CCI这样的工具来重写您的程序集,并将拦截作为后编译步骤。

如果你无法控制实例化

  1. 您可以使用ICorDebug – .Net调试API,它们真的很难使用且很重。
  2. 您可以使用ICorProfiler – .Net配置文件API也很复杂。

或者,您可以查看IronRuby这样的动态语言,它具有内置的alias_methoddefine_method优点(允许您重新定义任何内容),因此可以进行拦截。


.NET 4.5为ReJIT方法引入了一个方法,它为方法拦截提供了另一个钩子(前提是你没有运行并发/ bg GC,并且该方法没有内联)

查看企业库中的策略注入应用程序块 。

查看.net 4.0动态对象……这可以做到。

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