如何通过统一的MVC 4中注入构造控制器 [英] How to inject constructor in controllers by unity on mvc 4

查看:135
本文介绍了如何通过统一的MVC 4中注入构造控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是统一的1.1版,我无法注入构造函数。我的code sush为:

I'm using unity 1.1 version and i couldn't inject constructor. My code sush as:

在Global.asax的Application_Startup方法注册的依赖关系:

Registering dependencies in global.asax Application_Startup method:

Core.Instance.Container.RegisterType<ICartBusiness, CartBusiness>();

注入的构造:

private ICartBusiness _business;
        public FooController(ICartBusiness business)
        { _business = business; }

MVC投掷此异常:

mvc throwing this exception:

此对象定义无参数的构造函数。

No parameterless constructor defined for this object.

P.S:我不能因为我使用过旧引用的DLL,所以我不能用unity.WebApi或unity.Mvc3的DLL使用统一的新版

P.S: i can't use any new version of unity because i'm using too referenced old dlls so i can't use unity.WebApi or unity.Mvc3 dlls.

如何做到这一点?

推荐答案

您需要告诉ASP.MVC使用你的容器来解决这些问题。

You need to tell ASP.MVC to use your container to resolve them.

创建控制器工厂像

/// <summary>
/// Controller factory which uses an <see cref="IUnityContainer"/>.
/// </summary>
public class IocControllerFactory : DefaultControllerFactory
{
    private readonly IUnityContainer _container;

    public IocControllerFactory(IUnityContainer container)
    {
        _container = container;
    }

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        if (controllerType != null)
            return _container.Resolve(controllerType) as IController;
        else
            return base.GetControllerInstance(requestContext, controllerType);
    }
}

和通过的在Global.asax ControllerBuilder类

var factory = new IocControllerFactory(_container);
ControllerBuilder.Current.SetControllerFactory(factory);

每个框架要求一个新的控制器时它现在使用你的工厂,使用您的容器中。

Every time the framework asks for a new controller it now uses your factory which uses your container.

这篇关于如何通过统一的MVC 4中注入构造控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆