如何在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);
每次框架要求新控制器时,它现在使用您的工厂使用您的容器。