Para una clase dada, me gustaría tener una funcionalidad de rastreo, es decir, me gustaría registrar cada llamada a método (firma de método y valores de parámetros reales) y cada salida de método (solo la firma de método).
¿Cómo logro esto asumiendo que:
- No quiero usar ninguna biblioteca AOP de terceros para C #,
- No quiero agregar código duplicado a todos los métodos que quiero rastrear,
- No quiero cambiar la API pública de la clase: los usuarios de la clase deberían poder llamar a todos los métodos exactamente de la misma manera.
Para hacer la pregunta más concreta, supongamos que hay 3 clases:
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);
}
¿Cómo invoco Logger.LogStart y Logger.LogEnd para cada llamada a Method1 y Method2 sin modificar el método Caller.Call y sin agregar las llamadas explícitamente a Traced.Method1 y Traced.Method2 ?
Editar: ¿Cuál sería la solución si se me permite cambiar ligeramente el método de llamada?