Para uma determinada classe, eu gostaria de ter a funcionalidade de rastreamento, ou seja, gostaria de registrar todas as chamadas de métodos (assinatura do método e valores reais dos parâmetros) e todas as saídas do método (apenas a assinatura do método).
Como faço para isso assumindo que:
- Não quero usar nenhuma biblioteca AOP de terceiros para C #,
- Não quero adicionar código duplicado a todos os métodos que desejo rastrear,
- Não quero alterar a API pública da classe - os usuários da classe devem poder chamar todos os métodos exatamente da mesma maneira.
Para tornar a questão mais concreta, vamos assumir que existem 3 classes:
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);
}
Como invoco Logger.LogStart e Logger.LogEnd para todas as chamadas para Method1 e Method2 sem modificar o método Caller.Call e sem adicionar as chamadas explicitamente a Traced.Method1 e Traced.Method2 ?
Edit: Qual seria a solução se eu tivesse permissão para alterar um pouco o método de chamada?