我是Unity和Identity的新手,我重新构建了Identity 2的实现,使用int Keys而不是字符串。我跟着this article。它在这一点上很有用。但是,我正在使用Unity for IoC,它与我的存储库一起使用非常好,但是,我正在努力让它与Identity端一起工作。我跟着this article切换了。
我见过与此类似的问题,但所有这些问题都使用了字符串键,所以我假设我在使用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)));
当我尝试运行该应用时,context
的ctor中的ApplicationUserStore
参数为null
。
我很感激可以提供任何帮助。
谢谢!
答案 0 :(得分:1)
解析UserManager
时遇到异常。但MVC的Dependency解析器吞下它并返回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无法解析对象并引发异常时,这会导致程序失败。通过阅读异常的详细信息,您可以找到问题。如果您需要将来的帮助,也可以提交异常。