Question

J'utilise Castle DynamicProxy avec Autofac.J'ai un objet pour lequel j'ai créé un proxy, et j'ai deux intercepteurs qui agissent sur le proxy, un pour enregistrer une exception et le second pour modifier la valeur de retour de la méthode.Le code d'enregistrement ressemble à ce qui suit :

var builder = new ContainerBuilder();

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

En fournissant les arguments dans cet ordre, je constate que j'obtiens le résultat souhaité, c'est-à-dire que l'exception est enregistrée et le résultat est traité.Si j'inverse l'ordre des arguments, la journalisation n'a pas lieu.

Ma question alors :enregistrés de cette manière, les intercepteurs sont-ils assurés de s'exécuter dans le même ordre à chaque fois ?Ou existe-t-il un meilleur moyen de garantir que la commande correspondra à ce que je souhaite à chaque fois ?

FWIW, j'ai regardé l'interface IInterceptorSelector.Peut-être qu'il me manque quelque chose - ce qui n'est pas improbable - mais il semblait que ce n'était pas pertinent dans ce cas.Mais je serais heureux d'être corrigé si je me trompe.

Je peux fournir un exemple de code plus long si nécessaire.

musicologue

Était-ce utile?

La solution

Oui, les intercepteurs seront exécutés par défaut dans l'ordre fourni pour chaque méthode interceptée.

Comme vous l'avez correctement noté, vous pouvez le remplacer méthode par méthode en utilisant IInterceptorSelector si besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top