我是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
。
谢谢!
在解析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无法解析对象并抛出异常时,会导致程序失败。通过阅读异常的详细信息,您可以找到问题所在。如果将来需要帮助,也只需提交异常即可。