Результаты поиска
Используете ли вы AOP (аспектно-ориентированное программирование) в производственном программном обеспечении?
AOP -это интересная парадигма программирования, на мой взгляд. Однако здесь, на stackoverflow, об этом еще не было разговоров (по крайней мере, я не смог их найти). Что вы вообще об этом думаете? Вы используете AOP в своих проектах? Или вы думаете, что это скорее нишевая технология, которая не будет существовать в течение длительного времени или не войдет в мейнстрим (как OOP, по крайней мере, в теории ;))?
Если вы используете AOP, пожалуйста, сообщите нам, какие инструменты вы также используете. Спасибо!
Как перехватить вызов метода в C#?
Для данного класса я хотел бы иметь функцию трассировки, т. е. я хотел бы регистрировать каждый вызов метода (подпись метода и фактические значения параметров) и каждый выход метода (только подпись метода).
Как я могу это сделать предполагая что:
- Я не хочу использовать какую-либо третью сторону AOP библиотеки для C#,
- Я не хочу добавлять дубликат кода ко всем методам, которые я хочу trace,
- Я не хочу изменять public 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 ?
Edit: каким будет решение, если мне будет разрешено немного изменить метод вызова?