使用Simple Injector 3.1.2注册IUserStore



嗨,我一直在尝试用SimpleInjector 注册预制标识类ApplicationUserManager中的默认IUserStore

public class ApplicationUserManager : UserManager<ApplicationUser, int>
    {
        public ApplicationUserManager(IUserStore<ApplicationUser, int> store)
            : base(store)
        {
        }

我在App_Start文件夹中有一个SimpleInjectorInitializer文件,看起来像这样:

public static class SimpleInjectorInitializer
{
    public static void RegisterDependencies(Container container)
    {
        container.Register<ICatalogRepository, CatalogRepository>();
        container.Register<IUserRepository, UserRepository>();
        container.Register<ICatalogService, CatalogService>();
        container.Register<IUserService, UserService>();
        container.Register<IAdminService, AdminService>();
        container.Register<AccountController>();
        container.Register<ApplicationUserManager>();
        //container.Register<CustomUserStore>();
        //container.RegisterCollection(typeof(IUserStore<>), new[] { typeof(ApplicationUser) });
        //container.Register<IUserStore<>, store>();
        //container.RegisterPerWebRequest<IUserStore<ApplicationUser>>(() => new UserStore<ApplicationUser>(container.GetInstance<ApplicationDbContext>()));
        container.Verify();
    }
}

正如你所看到的,我已经尝试过几次通过查看类似的Stack Overflow问题来让它发挥作用,但它要么没有改变结果,要么出现语法错误。

当前单击应用程序主页上的登录按钮时,会抛出此错误:

ApplicationUserManager类型的构造函数包含参数名称为"store",类型为未注册。请确保IUserStore已注册,或更改ApplicationUserManager的构造函数。

如果寄存器ApplicationUserManager下面的两行被取消注释,则抛出以下错误:

中发生类型为"System.ArgumentException"的异常SimpleInjector.dll,但未在用户代码中处理

附加信息:提供的类型ApplicationUser没有实现IUserStore。

如有任何帮助,我们将不胜感激。

我回答了自己的问题。我使用了各种其他堆栈溢出问题,答案是编辑我的SimpleInjectorInitializer,如下所示:

public static class SimpleInjectorInitializer
{
    public static void RegisterDependencies(Container container)
    {
        container.Register<ICatalogRepository, CatalogRepository>();
        container.Register<IUserRepository, UserRepository>();
        container.Register<ICatalogService, CatalogService>();
        container.Register<IUserService, UserService>();
        container.Register<IAdminService, AdminService>();
        container.RegisterPerWebRequest<IUserStore<ApplicationUser, int>>(
            () => new CustomUserStore(container.GetInstance<ApplicationDbContext>()));
        container.RegisterPerWebRequest(
            () => new UserManager<ApplicationUser, int>(
                new CustomUserStore(
                    container.GetInstance<ApplicationDbContext>())));
        container.Register(
            () => HttpContext.Current.GetOwinContext().Authentication);
    }
}

注意:container.Verify()将阻止此解决方案工作,但它确实有效。我需要做进一步的研究,以找到在使用container.Verify()时更好的方法。

相关内容

  • 没有找到相关文章

最新更新