Ich schrieb ein Beispiel wie diese KlasseWie verwenden Sie IInterceptor in Castle.DynamicProxy?
Einfache Rechners:
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
implementiert "IInterceptor", die
[Serializable]
public abstract class Interceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
ExecuteBefore(invocation);
invocation.Proceed();
ExecuteAfter(invocation);
}
protected abstract void ExecuteAfter(IInvocation invocation);
protected abstract void ExecuteBefore(IInvocation invocation);
}
eine Interceptor-Klasse Erstellt von Dynamic zur Verfügung gestellt und erbte von "Interceptor" -Klasse
aber wenn ich es nicht funktionierte !!!
static void Main(string[] args)
{
ProxyGenerator generator = new ProxyGenerator();
Calculator c = generator.CreateClassProxy<Calculator>(new CalculatorInterceptor());
var r = c.Add(11, 22);
Console.WriteLine(r);
Console.ReadKey();
}
I ausgenommen, so etwas zu sehen:
START
33
END
aber zeigen nur
33
Wie ich es korrigieren?
ja, scheint in Ordnung, aber eine Frage, das Ergebnis ist START ENDE 33, wie ich vor und nach der richtigen Weise einstellen und Ergebnis wie dieses sehen kann 33 START ENDE, kann ich dies in Interceptor-Klasse für richtige Methoden aufrufen ?? !! – user3153878
@ user3153878 der Interceptor wird direkt vor und nach dem 'Add'-Aufruf ausgeführt, aber Sie schreiben das Ergebnis danach in die Konsole (execute before -> execute Add -> Ausführen nach -> write result) Wenn Sie die Konsole erstellen Rufen Sie innerhalb der 'Add'-Methode auf, Sie sollten das gewünschte Ergebnis erhalten. –