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
我在我的应用程序中使用 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