2012-03-14 3 views
2

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 se présente comme suit:Autofac + Castle DynamicProxy: Ordre des intercepteurs

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 trouve que je reçois le résultat que je veux, à savoir, l'exception est enregistrée et est traitée le résultat. Si je inverse l'ordre des arguments, la journalisation ne se produit pas.

Ma question, alors: enregistrée de cette façon, est-ce que les intercepteurs sont garantis d'être exécutés dans le même ordre à chaque fois? Ou y a-t-il une meilleure façon de s'assurer que la commande sera ce que j'ai l'intention à 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 échantillon de code plus long si nécessaire.

musicologyman

Répondre

2

Oui, les intercepteurs sera par défaut exécuté dans l'ordre prévu pour chaque méthode interceptée.

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

Questions connexes