Belirli bir sınıf için izleme işlevselliği istiyorum yani her yöntem çağrısı (yöntem imzası ve gerçek parametre değerleri) ve her yöntem çıkışı (sadece yöntem imzası) günlüğe kaydetmek istiyorum.
Bunu varsayarak bunu nasıl başarabilirim:
- C # için herhangi bir 3. taraf AOP kütüphanesi kullanmak istemiyorum,
- İzlemek istediğim tüm yöntemlere yinelenen kod eklemek istemiyorum,
- Sınıfın genel API'sını değiştirmek istemiyorum - sınıfın kullanıcıları tüm yöntemleri tam olarak aynı şekilde çağırabilmelidir.
Soruyu daha somut hale getirmek için 3 sınıf olduğunu varsayalım:
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);
}
Nasıl çağırmak yapmak Logger.LogStart ve Logger.LogEnd her çağrı için Method1 ve Method2 değiştirmeden Caller.Call yöntemi ve açıkça aramaları eklemeden Traced.Method1 ve Traced.Method2 ?
Düzenleme: Çağrı yöntemini hafifçe değiştirebilirsem çözüm ne olur?