对于给定的类,我希望具有跟踪功能,即我希望记录每个方法调用(方法签名和实际参数值)和每个方法退出(只是方法签名)。
假设:
- 我不想为 C# 使用任何 3rd 方 AOP 库,
- 我不想将重复的代码添加到我要跟踪的所有方法中,
- 我不想更改类的公共 API - 类的用户应该能够以完全相同的方式调用所有方法。
为了使问题更具体,我们假设有 3 个类:
public class Caller
{
public static void Call()
{
Traced traced = new Traced();
traced.Method1();
traced.Method2();
}
}
public class Traced
{
public void Method1(String name, Int32 value) { }
public void Method2(Object object) { }
}
public class Logger
{
public static void LogStart(MethodInfo method, Object[] parameterValues);
public static void LogEnd(MethodInfo method);
}
如何在不修改Caller.Call方法并且不将调用显式添加到Traced.Method1和Traced.Method2的情况下为每次调用Method1和Method2调用Logger.LogStart和Logger.LogEnd?
编辑:如果允许我稍微更改 Call 方法,解决方案是什么?