您好我一直在尝试使用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。
对此有任何帮助将不胜感激。
答案 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()
时找到更好的方法。