Untuk kelas tertentu saya ingin memiliki fungsi penelusuran yaitu saya ingin mencatat setiap pemanggilan metode (metode tanda tangan dan nilai parameter aktual) dan setiap metode keluar (hanya metode tanda tangan).
Bagaimana saya melakukan ini dengan asumsi bahwa:
- Saya tidak ingin menggunakan perpustakaan AOP pihak ketiga mana pun untuk C #,
- Saya tidak ingin menambahkan kode duplikat ke semua metode yang ingin saya lacak,
- Saya tidak ingin mengubah API publik dari kelas - pengguna kelas harus dapat memanggil semua metode dengan cara yang persis sama.
Untuk membuat pertanyaan lebih konkret mari kita asumsikan ada 3 kelas:
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);
}
Bagaimana cara memanggil Logger.LogStart dan Logger.LogEnd untuk setiap panggilan ke Method1 dan Method2 tanpa memodifikasi metode Caller.Call dan tanpa menambahkan panggilan secara eksplisit ke Traced.Method1 dan Traced.Method2 ?
Sunting: Apa yang akan menjadi solusi jika saya diizinkan sedikit mengubah metode Panggilan?