特定のクラスについて、トレース機能を使用したいと考えています。つまり、すべてのメソッド呼び出し(メソッドシグネチャと実際のパラメーター値)とすべてのメソッド出口(メソッドシグネチャのみ)をログに記録したいと考えています。
次のことを前提としてこれをどのように達成しますか:
- 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);
}
どうすれば起動しないLogger.LogStartとLogger.LogEndをすべての呼び出しのための方法1と方法2変更することなく、Caller.Callの方法をとに明示的に呼び出しを追加することなく、Traced.Method1とTraced.Method2?
編集:Callメソッドをわずかに変更できる場合、解決策は何ですか?