为每个方法预订额外的方法调用

时间:2014-12-10 10:02:54

标签: c#

我一直试图找到一种方法来订阅应用程序中的每个方法调用。 我想要做的是能够在调用方法时调用StartTimer,并在方法完成时调用StopTimer。

这个想法是,这不能集成在它只能在UnitTests项目中使用的复制源代码中。

我一直在网上寻找这个但是找不到与此相关的任何内容。这不会仅用于单元测试的生产代码中。我希望这可以通过反射来实现。

有谁知道如何实现这一目标,或者是否存在任何可以执行此操作的工具或库?

2 个答案:

答案 0 :(得分:0)

你可以使用postharp OnMethodBoundaryAspect在每个方法之前和之后添加额外的调用,有很多方法可以控制它应该应用的位置。

例如下面的代码会将这些额外的调用添加到名称空间" MyNamespace。*"上的公共类和公共方法。并且仅在调试模式下。

#if DEBUG 
[assembly: Trace( AttributeTargetTypes = "MyNamespace.*", 
    AttributeTargetTypeAttributes = MulticastAttributes.Public, 
    AttributeTargetMemberAttributes = MulticastAttributes.Public )] 
#endif 

http://www.postsharp.net/aspects/examples/logging

答案 1 :(得分:0)

您要实现的目标是Aspect Oriented Programming的经典用例 .Net中有多个框架 例如PostSharpFody Fody有一个MethodTimer模块,您可以使用NuGet轻松集成。

可能还有允许自动化(命令行或API)的分析器(例如dotTrace