如何在 mvc 4 上通过 Unity 在控制器中注入构造函数

本文关键字:控制器 Unity 注入 构造函数 mvc | 更新日期: 2023-09-27 17:56:56

我使用的是unity 1.1版本,但我无法注入构造函数。我的代码显示为:

在 global.asax Application_Startup方法中注册依赖项:

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

注入构造函数:

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

MVC 引发此异常:

没有为此对象定义无参数构造函数。

PS:我不能使用任何新版本的 unity,因为我使用了引用太多的旧 dll,所以我不能使用 unity。WebApi 或 unity。Mvc3 dlls.

怎么做?

如何在 mvc 4 上通过 Unity 在控制器中注入构造函数

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

创建控制器工厂,如下所示

/// <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);

每次框架要求一个新的控制器时,它现在都会使用使用容器的工厂。