这就是我注册我的身份类的方式:
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()编译没有错误。
答案 0 :(得分:3)
var test = new Container().GetInstance<IAppUserStore>();
将失败,因为您正在创建一个没有注册的Container的新实例,因此当您说IAppUserStore
(接口)时,不知道您要求的实现(即类)。
Container().GetInstance<AppDbContext>()
可以工作,因为你要求一个类,即使Container尚未注册,Container也会创建一个类的实例,只要Container可以解析该类型的所有构造函数参数
尽量避免在Composition Root之外引用Container。如果AccountController
需要IAppUserStore
,那么您应该考虑将其添加到AccountController
的构造函数中。