因为我倾向于使用Guid
作为我的主键类型,所以我的User
和Role
类实现如下:
public class User : IdentityUser<Guid, UserClaim, UserRole, UserLogin>
{
}
public class Role : IdentityRole<Guid, UserRole, RoleClaim>
{
}
请注意,
UserClaim
、UserRole
、UserLogin
和RoleClaim
都是以相同的方式实现的。这是我的
DbContext
实现。public class ApplicationDbContext : IdentityDbContext<User, Role, Guid, UserClaim, UserRole, UserLogin, RoleClaim, UserToken>
{
}
到目前为止,一切都很好,除了AspNetCore的新DI容器默认似乎不喜欢我的自定义实现。下面这行代码来自我的Startup.cs文件,会抛出下面显示的错误。
services
.AddIdentity<User, Role>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
GenericArguments[0], 'NewCo.DomainModel.Models.Identity.User', 在 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`4[TUser,TRole,TContext,TKey]' 上违反了类型'TUser'的约束。
我猜这是因为默认的 Identity gremlin 实现使用 IdentityUser<string>
,而我正在使用 IdentityUser<Guid>
。
接下来该怎么办?(我已经没有任何主意了)
注意:我正在构建针对 Microsoft 官方 .NET Core 和 ASP.NET Core 发布版本以及 Visual Studio Update 3(如果对任何人有帮助)
UserClaim
、UserRole
、UserLogin
、RoleClaim
和UserToken
版本呢?我在我的应用程序中使用Guid
作为键,没有遇到 DI 的问题。我实现了我的用户和角色模型,例如AppUser : IdentityUser<Guid>
、AppRole : IdentityRole<Guid>
。我还没有发现需要自定义其他身份模型的必要性。 - Brad