使用Simple Injector 3.1.2注册IUserStore

时间:2016-03-29 21:59:30

标签: c# asp.net dependency-injection asp.net-identity simple-injector

您好我一直在尝试使用SimpleInjector注册预先制作的Identity类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   未注册。请确保IUserStore   注册,或更改ApplicationUserManager的构造函数。

如果注册ApplicationUserManager下面的两行被取消注释,则抛出此错误:

  

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

     

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

对此有任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

我回答了自己的问题。我使用了各种其他堆栈溢出问题,答案是按如下方式编辑我的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()时找到更好的方法。

相关问题