无法弄清楚为什么Unity没有正确注入Identity DbContext

本文关键字:注入 Identity DbContext 弄清楚 为什么 Unity | 更新日期: 2023-09-27 18:06:51

我是Unity和Identity的新手,我已经重组了我的Identity 2的实现,使用int Keys而不是字符串。我看了这篇文章。它在这一点上工作得很好。然而,我正在使用Unity进行IoC,它与我的存储库配合得非常好,然而,我正在努力让它与身份方面一起工作。我跟着这篇文章转了过来。

我见过类似的问题,但他们都使用字符串键,所以我假设我有一些奇怪的地方,因为我使用int。

问题是在ApplicationUserStore类的元素:

public class ApplicationUserStore :
    UserStore<ApplicationUser, ApplicationRole, int,
    ApplicationUserLogin, ApplicationUserRole,
    ApplicationUserClaim>, IUserStore<ApplicationUser, int>,
    IDisposable
{
    public ApplicationUserStore(IdentityDb context)
        : base(context)
    {
    }
}

这是IdentityDb.cs:

public class IdentityDb : IdentityDbContext<ApplicationUser, ApplicationRole, int,
    ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
    public IdentityDb()
        : base("DefaultConnection")
    {
    }
    static IdentityDb()
    {
        // Set the database initializer which is run once during application start
        // This seeds the database with admin user credentials and admin role
        Database.SetInitializer<IdentityDb>(new IdentityDbInitializer()); 
    }
    public static IdentityDb Create()
    {
        return new IdentityDb();
    }
}

这里是UnityConfig.cs的相关部分:

container.RegisterType<IdentityDb>(new PerResolveLifetimeManager());
container.RegisterType<ApplicationSignInManager>();
container.RegisterType<ApplicationUserManager>();
container.RegisterType<ApplicationRoleManager>();
container.RegisterType<IAuthenticationManager>(
     new InjectionFactory(c=>HttpContext.Current.GetOwinContext().Authentication));
container.RegisterType<IUserStore<ApplicationUser, int>, ApplicationUserStore>(
     new InjectionConstructor(typeof(IdentityDb)));

当我尝试运行应用程序时,ApplicationUserStore的变量中的context参数为null

如能提供任何帮助,我将不胜感激。

谢谢!

无法弄清楚为什么Unity没有正确注入Identity DbContext

在解析UserManager时出现异常。但是MVC的依赖解析器会吞食它并返回null而不是object。

Startup.Auth.cs中代替

app.CreatePerOwinContext(() => 
     DependencyResolver.Current.GetService<ApplicationUserManager>()); 

写:

app.CreatePerOwinContext(() => 
     UnityConfig.GetConfiguredContainer().Resolve<ApplicationUserManager>());
//Don't forget to add Microsoft.Practices.Unity namespace

当Unity无法解析对象并抛出异常时,会导致程序失败。通过阅读异常的详细信息,您可以找到问题所在。如果将来需要帮助,也只需提交异常即可。