Pour une classe donnée, je voudrais avoir une fonctionnalité de traçage, c'est-à-dire que je voudrais enregistrer chaque appel de méthode (signature de méthode et valeurs réelles des paramètres) et chaque sortie de méthode (juste la signature de méthode).
Comment puis-je accomplir cela en supposant que:
- Je ne souhaite pas utiliser de bibliothèques AOP tierces pour C #,
- Je ne veux pas ajouter de code en double à toutes les méthodes que je souhaite tracer,
- Je ne veux pas changer l'API publique de la classe - les utilisateurs de la classe devraient pouvoir appeler toutes les méthodes exactement de la même manière.
Pour rendre la question plus concrète, supposons qu'il existe 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);
}
Comment appeler Logger.LogStart et Logger.LogEnd pour chaque appel à Method1 et Method2 sans modifier la méthode Caller.Call et sans ajouter explicitement les appels à Traced.Method1 et Traced.Method2 ?
Edit: Quelle serait la solution si je suis autorisé à modifier légèrement la méthode Call?