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

我正在使用Unity 1.1版本,我无法注入构造函数。 我的代码是:

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

Core.Instance.Container.RegisterType(); 

注入构造函数:

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

mvc抛出此exception:

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

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

这该怎么做?

您需要告诉ASP.MVC使用您的容器来解决它们。

创建一个控制器工厂

 ///  /// Controller factory which uses an . ///  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); 

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