2012-08-17 30 views
1

我從一些自定義日誌記錄繼承並擴展了MVC3的HandleErrorAttribute。解決全局actionfilters中的依賴關係?

我正在努力做的一件事就是用Castle Windsor巧妙地解決它的依賴問題。

通常我在ControllerActionInvoker的擴展中解決了這些依賴關係,但似乎HandleErrorAttribute在這裏沒有通過。

它從哪裏調用,我可以掛鉤和擴展它?

謝謝。

由於我目前做的一個例子:https://stackoverflow.com/a/6627002/148998

+0

你能澄清你所說的「一般我解決這些各種各樣的依賴在ControllerActionInvoker的延伸」是什麼意思?你在說「InvokeActionMethodWithFilters」嗎? – PatrickSteele 2012-08-17 13:07:18

+0

如果你看看我包含的鏈接上的答案,他有一個名爲WindsorActionInvoker的類。我基本上完全一樣。 – shenku 2012-08-19 08:29:07

回答

0

我最終做的是擴展ControllerActionInvoker並解決那裏的任何屬性依賴關係,特別是針對異常過濾器。

代碼:

public class WindsorActionInvoker : ControllerActionInvoker 
    { 
     private readonly IKernel _kernel; 

     public WindsorActionInvoker(IKernel kernel) 
     { 
      _kernel = kernel; 
     } 

     protected override ExceptionContext InvokeExceptionFilters(ControllerContext controllerContext, IList<IExceptionFilter> filters, System.Exception exception) 
     { 
      foreach (var actionFilter in filters.Where(actionFilter => !(actionFilter.GetType() == controllerContext.Controller.GetType()))) 
      { 
       _kernel.InjectProperties(actionFilter); 
      } 

      return base.InvokeExceptionFilters(controllerContext, filters, exception); 
     } 
1

的HandleErrorAttribute是IExceptionFilter所以你可能還需要重寫您的ControllerFactory InvokeExceptionFilters並有注入你的依賴。

+0

謝謝,我會盡力回覆你 – shenku 2012-08-23 02:16:17

+0

你讓我在正確的道路上,謝謝,但沒有這樣的方法來覆蓋ControllerFactory。 – shenku 2012-08-30 04:34:06