How to inject constructor in controllers by unity on mvc 4

£可爱£侵袭症+ 提交于 2019-11-29 16:57:52

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

Create an controller factory like

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

and register it via the ControllerBuilder in the global.asax

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!