获取 UserStore 实例的简单注入器
Simple injector getting instance of UserStore
这就是我注册身份的方式类:
container.RegisterPerWebRequest<AppDbContext>();
container.RegisterPerWebRequest<IAppUserStore>(() =>
new AppUserStore(container.GetInstance<AppDbContext>()));
container.RegisterPerWebRequest<AppUserManager>();
container.RegisterPerWebRequest<AppSignInManager>();
container.RegisterInitializer<AppUserManager>(
manager => InitializeUserManager(manager, app));
账户管理员:
private readonly AppSignInManager _signInManager;
private readonly AppUserManager _userManager;
public AccountController(AppUserManager userManager, AppSignInManager signInManager )
{
_signInManager = signInManager;
_userManager = userManager;
}
一切都很好,但是当我尝试输入类似
的内容时
var test = new Container().GetInstance<IAppUserStore>();
我收到下一个错误:找不到类型 IAppUserStore 的注册
但是 GetInstance<AppDbContext>
没问题
为什么我无法获取这些实例? Container.Verify() 编译没有错误。
var test = new Container().GetInstance<IAppUserStore>();
将失败,因为您正在创建一个没有注册的容器的新实例,因此当您说 IAppUserStore
(接口).
Container().GetInstance<AppDbContext>()
会起作用,因为您要求 class 并且容器将创建 class 的实例,即使它尚未注册 只要容器可以解析该 Type.
的所有构造函数参数
尽量避免在 Composition Root 之外引用容器。如果 AccountController
需要 IAppUserStore
那么你应该考虑将它添加到 AccountController
.
的构造函数中
这就是我注册身份的方式类:
container.RegisterPerWebRequest<AppDbContext>();
container.RegisterPerWebRequest<IAppUserStore>(() =>
new AppUserStore(container.GetInstance<AppDbContext>()));
container.RegisterPerWebRequest<AppUserManager>();
container.RegisterPerWebRequest<AppSignInManager>();
container.RegisterInitializer<AppUserManager>(
manager => InitializeUserManager(manager, app));
账户管理员:
private readonly AppSignInManager _signInManager;
private readonly AppUserManager _userManager;
public AccountController(AppUserManager userManager, AppSignInManager signInManager )
{
_signInManager = signInManager;
_userManager = userManager;
}
一切都很好,但是当我尝试输入类似
的内容时 var test = new Container().GetInstance<IAppUserStore>();
我收到下一个错误:找不到类型 IAppUserStore 的注册
但是 GetInstance<AppDbContext>
没问题
为什么我无法获取这些实例? Container.Verify() 编译没有错误。
var test = new Container().GetInstance<IAppUserStore>();
将失败,因为您正在创建一个没有注册的容器的新实例,因此当您说 IAppUserStore
(接口).
Container().GetInstance<AppDbContext>()
会起作用,因为您要求 class 并且容器将创建 class 的实例,即使它尚未注册 只要容器可以解析该 Type.
的所有构造函数参数尽量避免在 Composition Root 之外引用容器。如果 AccountController
需要 IAppUserStore
那么你应该考虑将它添加到 AccountController
.