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