Frage

Ich verwende Castle DynamicProxy mit Autofac.Ich habe ein Objekt, für das ich einen Proxy erstellt habe, und ich habe zwei Interceptoren, die auf den Proxy einwirken, einen zum Protokollieren einer Ausnahme und den zweiten zum Ändern des Rückgabewerts der Methode.Der Registrierungscode sieht wie folgt aus:

var builder = new ContainerBuilder();

builder.Register(c => c.Resolve<ProxyGenerator>()
    .CreateClassProxy<Foo>(
        c.Resolve<ResultProcessorInterceptor>(),
        c.Resolve<ExceptionLoggingInterceptor>()))
    .As<Foo>();

Durch die Angabe der Argumente in dieser Reihenfolge erhalte ich das gewünschte Ergebnis, d. h. die Ausnahme wird protokolliert und das Ergebnis verarbeitet.Wenn ich die Reihenfolge der Argumente umkehre, findet keine Protokollierung statt.

Meine Frage also:Werden auf diese Weise registrierte Abfangjäger garantiert jedes Mal in der gleichen Reihenfolge ausgeführt?Oder gibt es einen besseren Weg, um sicherzustellen, dass die Bestellung jedes Mal so ist, wie ich es mir vorgestellt habe?

FWIW, ich habe mir die IInterceptorSelector-Schnittstelle angesehen.Vielleicht übersehe ich etwas – was nicht unwahrscheinlich ist –, aber es sah so aus, als wäre das in diesem Fall nicht relevant.Aber ich würde mich über eine Korrektur freuen, wenn ich falsch liege.

Bei Bedarf kann ich ein längeres Codebeispiel bereitstellen.

Musikwissenschaftler

War es hilfreich?

Lösung

Ja, die Interceptoren werden standardmäßig in der angegebenen Reihenfolge für jede abgefangene Methode ausgeführt.

Wie Sie richtig bemerkt haben, können Sie es mit „je nach Methode“ überschreiben IInterceptorSelector wenn benötigt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top