Unity v4(对于 MVC 5)不解析注册类型

Unity v4 (for MVC 5) not resolving registered types

我创建了接口,将控制器与具体实现分开:

    private IUserRepository _userRepository;

    public AccountController(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }

并设置类型注册:

        public static void RegisterTypes(IUnityContainer container)
    {
        // NOTE: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements.
        // container.LoadConfiguration();

        **container.RegisterType<IUserRepository, UserRepository>();**
        // asp identity
        container.RegisterType<IUserStore<ApplicationUser, int>, UserStoreIntPk>();
        container.RegisterType<UserManager<ApplicationUser, int>>();
        container.RegisterType<DbContext, ApplicationDbContext>();
        container.RegisterType<ApplicationUserManager>();
        container.RegisterType<IAuthenticationManager>(new InjectionFactory(o => HttpContext.Current.GetOwinContext().Authentication));
    }

但是我在controller中的私有变量_userRepository一直是null! 为什么?我该如何解决?

编辑 1:Global.asax:

        protected void Application_Start()
    {


        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        //var factory = new CustomControllerFactory();
        //ControllerBuilder.Current.SetControllerFactory(factory);

        UnityWebActivator.Start();
    }

我找到了错误的原因。我的控制器有多个构造函数。 Unity 选择了具有最大参数(最长的一个)的构造函数。它不是我的构造函数和我的依赖参数。

因此,我调整了初始构造函数以采用我的附加参数。

public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager, IUserRepository userRepository)

现在一切正常。