2012-11-08 30 views
1

如何使用流暢配置將異常或日誌記錄攔截器添加到Windsor控制器工廠?如何在Windsor控制器工廠中注入日誌攔截器?

在我的引導程序容器中,新增了我的安裝程序以傳入諸如assemblyName之類的值。

在我ControllerInstaller我這樣做,我認爲這是錯誤的,爲什麼它不工作:

container.Register(
    Classes 
     .FromAssemblyNamed(_assemblyName) 
     .BasedOn<IController>() 
     .LifestyleTransient(), 
    Component 
     .For<IController>() 
     .ImplementedBy<Controller>() 
     .Interceptors(InterceptorReference.ForType<LoggingAspect>()) 
     .Anywhere); 

在我loggingAspect安裝我這樣做:

container.Register(
    Component 
     .For<IInterceptor>() 
     .ImplementedBy<LoggingAspect>()); 

回答

3

我認爲這應該工作...

_container.Register(
    Classes 
     .FromAssemblyNamed(_assemblyName) 
     .BasedOn<IController>() 
     .LifestyleTransient() 
     .Configure(component => component.Interceptors<LoggingAspect>())); 
+0

非常感謝泰勒,我希望在溫莎文檔中這樣的基本東西更清晰。 – OutOFTouch

+0

沒問題。很高興我能幫上忙。 – TylerOhlsen

2

這是一個很好的文章關於創建一個定製的Windsor控制器工廠。
ASP.NET MVC with Windsor – programmatic controller registration

下面是如何使用流利配置註冊攔截器的示例。

把兩者放在一起應該很容易。您只需將.Interceptors<MyLoggingInterceptor>()行添加到您的windsor控制器工廠註冊和/或註冊您的控制器。

container.Register(
    Component 
     .For<IInterceptor>() 
     .ImplementedBy<MyLoggingInterceptor>(), 
    Component 
     .For<IInterceptor>() 
     .ImplementedBy<MyArgumentInterceptor>(), 
    Component 
     .For<IDoStuff>() 
     .ImplementedBy<DoStuff>() 
     .Interceptors<MyLoggingInterceptor>() 
     .Interceptors<MyArgumentInterceptor>()); 
+0

謝謝有問題我是因爲我新了這安德烈不中WindsorControllerFactory回覆他例。我也在安裝程序中註冊控制器。我會在我的問題中添加一些代碼。 – OutOFTouch

0

另一種方法:

container.Register(
    Component.For<IInterceptor>() 
     .ImplementedBy<ExceptionHandlerInterceptor>() 
     .LifeStyle.Is(LifestyleType.Transient) 
     .Named("ExceptionHandlerInterceptor"), 
    Component.For<IController>() 
     .ImplementedBy<Controller>() 
     .LifeStyle.Is(LifestyleType.Transient) 
     .Interceptors("ExceptionHandlerInterceptor"));