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?