C# 在.NET中收到方法调用通知

C# 在.NET中收到方法调用通知,c#,.net,reflection,C#,.net,Reflection,我希望在调用特定方法时得到通知。我希望我可以通过反射来实现这一点,但我的尝试并没有让我成功。如何通知我 我想使用MethodInfo是一条不错的路,但正如我所说,我发现那里没有任何东西可以帮助我完成我想做的事情 我不能改变方法,也不能用属性或任何东西装饰它。如果我可以这样做,我就不需要这样做了,我可以改变方法本身。你考虑过AOP(面向方面编程)吗?类似于。我认为唯一的方法是重写方法体,以便在调用方法时通知您,或者使用CLR分析Api 第一种方法可以通过使用AOP框架来实现。您可以使用Postsh

我希望在调用特定方法时得到通知。我希望我可以通过反射来实现这一点,但我的尝试并没有让我成功。如何通知我

我想使用
MethodInfo
是一条不错的路,但正如我所说,我发现那里没有任何东西可以帮助我完成我想做的事情


我不能改变方法,也不能用属性或任何东西装饰它。如果我可以这样做,我就不需要这样做了,我可以改变方法本身。

你考虑过AOP(面向方面编程)吗?类似于。

我认为唯一的方法是重写方法体,以便在调用方法时通知您,或者使用CLR分析Api


第一种方法可以通过使用AOP框架来实现。您可以使用Postsharp(已转化为商业产品)通过OnMethodBoundaryAspect实现它。下面是一个示例:

您可以使用扩展方法


因此,您可以使用不同的属性并在实际方法之前或之后修改所有内容

反射是解决方案的一半。为了拦截方法调用,您需要包装正在观察的对象。通常,这是通过远程代理对象完成的

企业库有Unity拦截块,它完全满足您的需要。此外,您可能还需要研究Castle框架的DynamicProxy,它使您能够非常彻底地控制这个拦截过程


通过谷歌搜索面向方面的编程将为您提供更多信息。

+1您也可以在不使用PostSharp的情况下实现类似AOP的功能,只需使用装饰器:我不是调用这些方法的人。我不能让原始代码突然调用我的扩展方法。所以不去。