无法使用 UserStore 创建实例

Posted

技术标签:

【中文标题】无法使用 UserStore 创建实例【英文标题】:cannot create an instance using UserStore 【发布时间】:2016-06-21 21:24:58 【问题描述】:

我刚刚使用 UserStore 定义了一个实例,如下所示。

var store = new UserStore<ApplicationUser>(new ProjectEntities());

但出现以下错误

类型“project_name.Models.ApplicationUser”不能用作类型 泛型类型或方法“UserStore”中的参数“TUser”。 没有隐式引用转换 'project_name.Models.ApplicationUser' 到 'Microsoft.AspNet.Identity.EntityFramework.IdentityUser'。

这里是我如何在IdentityModel.cs 中定义ApplicationUser

public class ApplicationUser : IdentityUser<string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>

    public ApplicationUser()
    
    this.Id = Guid.NewGuid().ToString();
    

    // custom User properties/code here
    public string Full_Name  get; set; 
    public string Gender  get; set; 

    public async Task<ClaimsIdentity>GenerateUserIdentityAsync(ApplicationUserManager manager)
    
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        return userIdentity;
    

【问题讨论】:

【参考方案1】:

我认为你做错了什么错误很明显

您正在尝试传递ApplicationUser,但UserStore 要求您使用Microsoft.AspNet.Identity.EntityFramework.IdentityUse 的类型,您可能应该从Microsoft.AspNet.Identity.EntityFramework.IdentityUse 扩展/继承ApplicationUser

类似

public class ApplicationUser : IdentityUser

【讨论】:

ApplicationUserIdentityModels.cs 文件中存在这样的public class ApplicationUser : IdentityUser&lt;string,ApplicationUserLogin,ApplicationUserRole,ApplicationUserClaim&gt; 【参考方案2】:

我不确定您为什么使用 IdentityUser&lt;string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim&gt; 而不是 IdentityUser,正如 COLD TOLD 指出的那样,因为该签名的最常见用途是使用 INT 键而不是字符串。使用 IdentityUser,你会默认得到字符串键。

因此,假设您有其他原因使用该签名,您将需要覆盖整个身份堆栈:IdentityUser、IdentityUserRole、IdentityRole、IdentityUserClaim、IdentityUserLogin、IdentityDbContext、UserStore 和 RoleStore。

所以 UserStore 将是:

public class ApplicationUserStore : 
    UserStore<ApplicationUser, ApplicationRole, int,
    ApplicationUserLogin, ApplicationUserRole, 
    ApplicationUserClaim>, IUserStore<ApplicationUser, int>, 
    IDisposable

    public ApplicationUserStore() : this(new IdentityDbContext())
    
        base.DisposeContext = true;
    

    public ApplicationUserStore(DbContext context)
        : base(context)
    
    

见http://johnatten.com/2014/07/13/asp-net-identity-2-0-extending-identity-models-and-using-integer-keys-instead-of-strings/

【讨论】:

在我的IdentityModels.cs 文件中我有ApplicationUserStore as follows 但是一旦我用你的代码sn-p 替换它得到6 个编译时错误,首先是这样的The type 'project_name.Models.ApplicationUserRole' cannot be used as type parameter 'TUserRole' in the generic type or method 'UserStore&lt;TUser, TRole, TKey, TUserLogin, TUserRole, TUserClaim&gt;'. 您必须覆盖所有 8 个身份类别(或使用非泛型 IdentityUser)。

以上是关于无法使用 UserStore 创建实例的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net Core 2.1 Identity - UserStore 依赖注入

Android 错误:“无法创建 epoll 实例”或“无法创建唤醒管道”

在 Android 中使用 Hilt 后无法创建视图模型实例

无法连接到使用 Elastic Beanstalk 创建的 RDS 实例

自动缩放无法正确创建实例

Android - 使用改造时出现错误“无法构造实例(尽管至少存在一个创建)”