2010-11-12 80 views
1
container 
    .Register 
    (
     AllTypes 
      .FromAssemblyContaining<TestInterceptor>() 
      .BasedOn<IInterceptor>() 
      .Where(t => t.Name.EndsWith("Interceptor")) 
      .WithService.AllInterfaces() 
      .Configure(c => c.LifeStyle.Transient), 

     Component 
      .For<IRepository>() 
      .ImplementedBy<LogRepository>() 
      .Interceptors 
      (
       InterceptorReference.ForType<TestInterceptor>(), 
       InterceptorReference.ForType<TestTwoInterceptor>(), 
       InterceptorReference.ForType<TestThreeInterceptor>() 
      ).Anywhere 
    ); 

是否有一种简单的方法来指定组件将使用所有拦截器而不是必须指定每个拦截器?Castle Windsor - 指定所有拦截器

回答

1

这是一个有趣的问题。在流利的API中没有什么可以解决的问题,主要是因为大多数时候你想要对应用哪个拦截器以及以什么顺序进行细粒度控制。这是一种手术工具。

无论如何,如果您确定需要以这种方式首先注册拦截器,然后抓住他们的名字(通过container.Kernel.GetAssignableHandlers(typeof(IInterceptor))),并在一个循环中将所有这些名称应用到组件。