IRepositories 在使用 Unity DI 的帐户控制器中为空

IRepositories is null in account controller with Unity DI

我在我的应用程序中使用 Unity DI。我已经在 UnityConfig.cs 文件中注册了我的存储库。

 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<DbContext, RanoChatDbContext>(new HierarchicalLifetimeManager());
     container.RegisterType<UserManager<AppUser>>( new HierarchicalLifetimeManager());
     container.RegisterType<IUserStore<AppUser>, UserStore<AppUser>>(new HierarchicalLifetimeManager());
     container.RegisterType<AccountController>( new InjectionConstructor());
     container.RegisterType<IRepositories, Repositories>();
 }

并在 AccountController

private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
private IRepositories repos;

public AccountController()
{            
}

public AccountController(ApplicationUserManager userManager,
                         ApplicationSignInManager signInManager,
                         IRepositories Repositories)
{
    repos = Repositories;
    UserManager = userManager;
    SignInManager = signInManager;
}

但是回购是 null

同时在我的 HomeController 中正确初始化了相同的存储库。

IRepositories repos;

public HomeController(IRepositories repos)
{
    this.repos = repos;
}

可能您的 3-arg 构造函数具有 Unity 不知道如何注入的其他类型(ApplicationUserManager、ApplicationSignInManager),因为您没有注册这些类型。

public AccountController(ApplicationUserManager userManager,
                         ApplicationSignInManager signInManager, 
                         IRepositories Repositories)

此外,它可能只是调用控制器的零参数构造函数。告诉 Unity 你希望它如何通过注册它来实例化控制器:

container.RegisterType<AccountController>(new InjectionConstructor(typeof(Repositories)));

参见 MSDN - Registering Injected Parameter and Property Values