2010-04-04 14 views

Répondre

6

-vous le faire en deux étapes:

  • Vous devez inscrire l'intercepteur en tant que service dans le récipient:
container.Register(Component.For<MyInterceptor>()); 
  • Vous inscrivez le composant que vous voulez intercepter. En utilisant la méthode Interceptors sur l'API fluide, vous spécifiez laquelle des intercepteurs enregistrés (par clé ou type) que vous voulez intercepter ce composant avec:
container.Register(Component.For<IFoo>().ImplementedBy<Foo>() 
    .Interceptors<MyInterceptor>()); 

Voir the documentation pour plus de détails.

+0

@Krzysztof Mon intercepteur est conçu pour choisir toutes les méthodes et vérifier un attribut personnalisé, ce qui signifie que la classe pourrait ne pas implémenter une interface. Essentiellement toute méthode qui a un attribut de transaction va dans une transaction. Alors, comment ajouter un intercepteur pour intercepter toutes les méthodes dans le domaine de l'application? Votre exemple si pour 'IFoo' –

+0

DynamicProxy est capable d'intercepter les appels aux méthodes sur les classes, mais l'exigence est que ces méthodes doivent être virtuelles, aussi longtemps que vos composants satisfont cette exigence, vous êtes prêt à aller –

+1

@QuintinPar 7 ans plus tard ... Pour intercepter chaque composant créé, utilisez un exemple IContributeComponentModelConstruction http://stackoverflow.com/a/26426700/90033 et https://github.com/castleproject/Windsor/blob/master/docs/componentmodel-construction-contributors .Maryland – Konstantin

1

Enregistrez d'abord l'intercepteur:

container.Register(Component.For<IDbInterceptor>().ImplementedBy<DbInterceptor>().Named("transactionInterceptor"));

Alors inscrivez-vous l'objectant être interceptées.

container.Register (Component.For < IMyService>() ImplementedBy < MyService>(). Nommé ("MyService"). Intercepteurs (nouveau InterceptorReference ("transactionInter ceptor ")). N'importe où);