Для данного класса я хотел бы иметь функцию трассировки, т.е. я хотел бы регистрировать каждый вызов метода (сигнатура метода и фактические значения параметров) и каждый выход метода (только сигнатура метода).
Как мне сделать это, если:
- Я не хочу использовать сторонние библиотеки 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 ?
Изменить: Каково было бы решение, если бы мне позволили немного изменить метод Call?