2010-06-03 50 views
5

我希望在调用特定方法时收到通知。我希望我可以用Reflection完成这个任务,但是我的尝试没有把我带到任何地方。我如何得到通知?在.NET中通知方法调用

我想通过使用MethodInfo就是要走的路,但就像我说的,我没有发现任何可以帮助我完成自己想做的事情。

我不能改变方法或装饰它的属性或任何东西。如果我能做到这样的事情,我不需要这样做,我可以改变方法本身。

回答

8

你有没有考虑AOP(面向方面​​的编程)?类似于PostSharp

+1

+1我肯定会使用这种方法! – 2010-06-03 10:37:11

+2

+1您还可以在不使用PostSharp的情况下使用类AOP功能,只使用装饰器:http://blog.ploeh.dk/2010/04/07/DependencyInjectionIsLooseCoupling.aspx – 2010-06-03 10:38:35

+0

装饰器也是一个好主意 – 2010-06-03 10:41:35

2

我相信要做到这一点的唯一方法是重写方法体,以便在方法被调用时通知您或使用CLR Profiling Api。

第一种方式可以通过使用AOP框架来完成。您可以使用Postharp(已转换为商业产品)使用OnMethodBoundaryAspect实现它。这里有一个例子:Derive the class from OnMethodBoundaryAspect

-1

你可以使用扩展方法

所以你可以前或实际的方法

+1

我不是一个叫这些方法的人。我无法使原始代码突然调用我的扩展方法。所以不行。 – Alex 2010-06-30 09:37:34

0

反射后使用不同的属性和修改的一切是成功的一半解决方案。为了拦截方法调用,你需要包装被观察对象。通常通过远程代理对象来完成。

企业库拥有Unity Interception块,它完全符合你的需求。你也可以看看Castle框架的DynamicProxy,它可以让你非常全面地控制这个拦截过程。

谷歌搜索面向方面编程将给你更多的信息。