为每个方法订阅其他方法调用

本文关键字:方法 其他 调用 | 更新日期: 2023-09-27 18:33:52

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

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

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

有谁知道如何实现这一点,或者是否存在任何可以做到这一点的工具或库?

为每个方法订阅其他方法调用

您可以使用 postsharp OnMethodBoundaryAspect 在每个方法之前和之后添加其他调用,有很多方法可以控制它应该在哪里应用。

例如,下面的代码将仅在命名空间"MyNamespace.*"上添加对公共类和公共方法的附加调用,并且仅在调试模式下。

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

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

您要实现的是面向方面编程的经典用例。
.Net 中有多个框架。
例如PostSharp和Fody。
Fody 有一个 MethodTimer 模块,你可以使用 NuGet 轻松集成它。

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