特定のクラスについて、トレース機能が必要です。つまり、すべてのメソッド呼び出し (メソッド シグネチャと実際のパラメーター値) とすべてのメソッド終了 (メソッド シグネチャのみ) をログに記録したいと考えています。
次のことを前提として、これを達成するにはどうすればよいですか。
- C# 用にサードパーティの 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 メソッドを少し変更することが許可されている場合、どのような解決策がありますか?