Abfangen von Methodenaufrufen in C#
In C# fehlt die direkte AOP-Unterstützung, aber clevere Techniken ermöglichen das Abfangen von Methodenaufrufen. Lassen Sie uns dies anhand von Beispielklassen untersuchen:
<code class="language-csharp">public class Caller { public static void Call() { Traced traced = new Traced(); traced.Method1("test", 10); traced.Method2(new object()); } } public class Traced { public void Method1(string name, int value) { } public void Method2(object obj) { } } public class Logger { public static void LogStart(MethodInfo method, object[] parameters) { /* Logging logic */ } public static void LogEnd(MethodInfo method) { /* Logging logic */ } }</code>
Abfangen ohne Änderung der Methoden
Dieser Ansatz nutzt Reflection.Emit
für die dynamische Code-Injektion:
GetMethods
, um Methoden abzurufen, die abgefangen werden müssen.ILGenerator
für abgefangene Methoden.ILGenerator
, um Aufrufe von Logger.LogStart
vor und Logger.LogEnd
nach der Methodenausführung einzufügen.Abfangen mit geringfügigen Anruferänderungen
Eine leichte Änderung von Caller.Call
ermöglicht einen ereignisbasierten Ansatz:
Caller.Call
und lösen Sie Logger
Aufrufe vor und nach der Methodenausführung aus.Auswirkungen auf die Leistung
Die Reflection.Emit
-Methode ist zwar leistungsstark, führt jedoch zu einem Leistungsaufwand. Bei Produktionsimplementierungen sollten Optimierungsstrategien Vorrang haben.
Das obige ist der detaillierte Inhalt vonWie kann ich Methodenaufrufe in C# ohne explizite AOP-Unterstützung abfangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!