我希望在调用特定方法时收到通知。我希望我可以用Reflection完成这个任务,但是我的尝试没有把我带到任何地方。我如何得到通知?在.NET中通知方法调用
我想通过使用MethodInfo
就是要走的路,但就像我说的,我没有发现任何可以帮助我完成自己想做的事情。
我不能改变方法或装饰它的属性或任何东西。如果我能做到这样的事情,我不需要这样做,我可以改变方法本身。
我希望在调用特定方法时收到通知。我希望我可以用Reflection完成这个任务,但是我的尝试没有把我带到任何地方。我如何得到通知?在.NET中通知方法调用
我想通过使用MethodInfo
就是要走的路,但就像我说的,我没有发现任何可以帮助我完成自己想做的事情。
我不能改变方法或装饰它的属性或任何东西。如果我能做到这样的事情,我不需要这样做,我可以改变方法本身。
你有没有考虑AOP(面向方面的编程)?类似于PostSharp。
我相信要做到这一点的唯一方法是重写方法体,以便在方法被调用时通知您或使用CLR Profiling Api。
第一种方式可以通过使用AOP框架来完成。您可以使用Postharp(已转换为商业产品)使用OnMethodBoundaryAspect实现它。这里有一个例子:Derive the class from OnMethodBoundaryAspect
反射后使用不同的属性和修改的一切是成功的一半解决方案。为了拦截方法调用,你需要包装被观察对象。通常通过远程代理对象来完成。
企业库拥有Unity Interception块,它完全符合你的需求。你也可以看看Castle框架的DynamicProxy,它可以让你非常全面地控制这个拦截过程。
谷歌搜索面向方面编程将给你更多的信息。
+1我肯定会使用这种方法! – 2010-06-03 10:37:11
+1您还可以在不使用PostSharp的情况下使用类AOP功能,只使用装饰器:http://blog.ploeh.dk/2010/04/07/DependencyInjectionIsLooseCoupling.aspx – 2010-06-03 10:38:35
装饰器也是一个好主意 – 2010-06-03 10:41:35