获取 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.

的构造函数中