小编And*_*est的帖子

使用Unity将依赖项注入自定义ActionFilter

目前,我有一个自定义ControllerFactory,我注入我的Unity容器:

在global.asax Application_Start()中:

var container = InitContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));

var factory = new UnityControllerFactory(container);
ControllerBuilder.Current.SetControllerFactory(factory);
Run Code Online (Sandbox Code Playgroud)

在控制器工厂中,我将控制器设置为使用自定义ActionInvoker,如下所示:

protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
    var controller = base.GetControllerInstance(requestContext, controllerType) as Controller;

    if (controller != null)
        controller.ActionInvoker = new UnityActionInvoker(_container);

    return controller;
}
Run Code Online (Sandbox Code Playgroud)

最后在我的自定义ActionInvoker中,我尝试使用ActionInvokers容器构建调用的操作:

protected override ActionExecutedContext InvokeActionMethodWithFilters(
        ControllerContext controllerContext,
        IList<IActionFilter> filters,
        ActionDescriptor actionDescriptor,
        IDictionary<string, object> parameters)
{
    var builtUpFilters = new List<IActionFilter>();

    foreach (IActionFilter actionFilter in filters)
    {
        builtUpFilters.Add(_container.BuildUp<IActionFilter>(actionFilter));
    }

    return base.InvokeActionMethodWithFilters(controllerContext, builtUpFilters, actionDescriptor, parameters);
}
Run Code Online (Sandbox Code Playgroud)

以下是正在构建的ActionFilters之一的示例:

public class PopulatRolesAttribute …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection unity-container asp.net-mvc-3

8
推荐指数
1
解决办法
1万
查看次数

自定义ActionInvoker与MVC 3中的ActionFilter依赖注入的自定义FilterProvider

任何人都可以了解使用自定义ActionInvoker的优点和缺点,以便在自定义ActionFilters上执行依赖注入,而不是使用自定义FilterProvider ,如此处所示

在这两种情况下,您仍然希望避免在ActionFilters上进行构造函数注入,对我来说,似乎所有自定义FilterProvider在这种情况下都会增加额外的开销,即必须在容器中注册ActionFilters和提供程序.

dependency-injection unity-container asp.net-mvc-3

7
推荐指数
1
解决办法
2291
查看次数