拦截方法调用

aly*_*aly 4 c# reflection interception

有没有一种方法可以拦截一些方法调用而不需要在方法本身周围进行任何代码更改?

我不需要在运行时注入任何自定义行为,只需将自定义性能日志记录添加到现有项目.

Aro*_*ron 14

您需要面向方面编程.

AOP有4种主要口味

  1. RealProxy基于运行时的AOP
  2. 运行时子类/虚方法AOP
  3. Post Compile IL编织AOP
  4. 预编译源代码AOP

以上是按执行速度(从最慢到最快)的顺序排序.注意最后两个"应该"是相同的速度.但是我希望编译器比Post Compile IL编织产生更好的IL.

第一个阵营通常包括IOC容器,因为它们非常适合这种模式,包括但不限于此

  • 统一
  • Spring.NET
  • Castle.Windsor
  • Postsharp Express

第二个阵营非常罕见,我能想到的唯一一个项目是Entity Framework(它用于Lazy加载,但它不可扩展,无法自定义).

第三阵营也非常灵巧,因为这种技术非常复杂和困难.这可以通过在编译后编辑dll程序集来实现,以添加所需的额外代码.

  • Postsharp Pro
  • Mono.Cecil能
  • Fody(mono.cecil包装器)

最后的阵营相对较新.事实上,新的唯一真正的入口是实验性的MS Roslyn.这实际上是一个C#编译器.所以...是的......它非常神奇.

现在,如果您遇到性能关键代码的真正巨大性能问题,我建议使用Fody.令人敬畏的是,它是免费的(与Postsharp Pro不同),它使用nuget,并且Fody.MethodTimer 中已经有一个性能工具.

  • Postsharp还有一个免费的快速版本,根据您的使用情况,这可能就足够了. (2认同)