如何在 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.
怎么做?
你需要告诉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);
每次框架要求一个新的控制器时,它现在都会使用使用容器的工厂。