使用Castle Fluent界面注册拦截器

时间:2010-04-04 19:14:49

标签: c# castle-windsor fluent-interface iinterceptor

我试图通过拦截器实现nhibernate transaction handling,并且无法弄清楚如何通过流畅的机制注册接口。

我看到了

Component.For<ServicesInterceptor>().Interceptors

但不确定如何使用它。有人可以帮我吗? This example似乎有点复杂。

2 个答案:

答案 0 :(得分:6)

您分两步完成:

  • 您需要将拦截器注册为容器中的服务:
container.Register(Component.For<MyInterceptor>());
  • 您注册要拦截的组件。在fluent API上使用Interceptors方法,您可以指定要拦截此组件的已注册拦截器(按键或类型):
container.Register(Component.For<IFoo>().ImplementedBy<Foo>()
   .Interceptors<MyInterceptor>());

有关详细信息,请参阅the documentation

答案 1 :(得分:1)

首先注册拦截器:

  

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

然后注册截获的对象:

  

container.Register(Component.For&lt; IMyService&gt;()。ImplementedBy&lt; MyService&gt;()。Named(“MyService”)。拦截器(new        InterceptorReference( “transactionInterceptor”))任何地方);