Pour une classe donnée, je voudrais avoir la fonctionnalité de traçage c'est à dire que je tiens à vous connecter à chaque appel de méthode (signature de la méthode et les valeurs de paramètre) et chaque méthode de sortie (juste la signature de la méthode).
Comment puis-je accomplir ceci en supposant que:
- Je ne veux pas utiliser un 3ème partie AOP bibliothèques pour C#,
- Je ne veux pas ajouter de code en double à toutes les méthodes que j'ai envie de trace,
- Je ne veux pas changer l'API publique de la classe - les utilisateurs de la classe doivent être en mesure d'appeler toutes les méthodes exactement de la même manière.
Pour rendre la question plus concrète supposons qu'il y a 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 puis-je invoquer l' Enregistreur.LogStart et Enregistreur.LogEnd pour chaque appel de Method1 et Method2 sans modification de l' Appelant.Appel de la méthode, et sans ajouter l'appelle explicitement à Remonter.Method1 et Tracée.Method2?
Edit: Ce qui serait la solution si je me suis permis de modifier légèrement l'Appel de la méthode?