2010-11-12 104 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))),並在一個循環中將所有這些名稱應用到組件。