解决全局actionfilters中的依赖关系?

时间:2012-08-17 00:42:38

标签: c# asp.net-mvc-3 castle-windsor action-filter

我通过一些自定义日志记录继承并扩展了MVC3的HandleErrorAttribute。

我努力做的一件事就是使用Castle Windsor整齐地解决依赖关系。

通常我会在ControllerActionInvoker的扩展中解决这些类型的依赖关系,但似乎HandleErrorAttribute不会在这里传递。

从哪里调用它我可以挂钩并扩展它?

感谢。

作为我目前所做工作的一个例子:https://stackoverflow.com/a/6627002/148998

2 个答案:

答案 0 :(得分:1)

HandleErrorAttribute是IExceptionFilter,因此您可能还需要覆盖ControllerFactory上的InvokeExceptionFilters并在那里注入依赖项。

答案 1 :(得分: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);
        }