为每个方法订阅其他方法调用
本文关键字:方法 其他 调用 | 更新日期: 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)