Unity v4(适用于MVC 5)未解析已注册的类型



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

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

但我在控制器中的私有变量_userRepository始终为空!为什么?我该怎么修?

第1版:全局.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)

现在一切都很好。

最新更新