Для даного класу я хотів би мати функцію відстеження, тобто я хотів би записати кожен виклик методу (підпис методу та фактичні значення параметрів) та кожен вихід методу (лише підпис методу).
Як мені це зробити, якщо:
- Я не хочу використовувати жодні сторонні бібліотеки AOP для C #,
- Я не хочу додавати дублікат коду до всіх методів, які я хочу простежити,
- Я не хочу змінювати публічний 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 для кожного виклику до Method1 та Method2 без зміни методу Caller.Call та без явного додавання викликів до Traced.Method1 та Traced.Method2 ?
Редагувати: Що було б рішенням, якщо мені дозволять трохи змінити метод виклику?