扩展ASP.NET Core身份用户

时间:2019-02-22 17:59:34

标签: c# .net asp.net-core .net-core

为我的DI使用结构图。默认情况下,一切正常,但是我想将fn和ln添加到AspNetUser DB中。我添加了一个新的类,如下所示:

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

修改后的Startup.cs:

    services.AddDbContext<AppDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<AppDbContext>()
        .AddDefaultTokenProviders();

修改后的ApplicationDbContext:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}

控制器(从Identityuser修改为AppliationUser):

    public AccountController(
        SignInManager<ApplicationUser> signInManager,
        UserManager<ApplicationUser> userManager)
    {
        m_signInManager = signInManager;
        m_userManager = userManager;
    }

我遇到的错误:

  

StructureMapConfigurationException:没有注册默认实例   并且无法自动确定其类型   “ IUserStore”

     

没有为IUserStore指定配置

2 个答案:

答案 0 :(得分:1)

致敬:

在创建小节时,很容易错过对身份类的更新。

所以,这个想法是:

1)检查您将从身份中覆盖的基本类别:ApplicationUser,ApplicationRole(如果进行修改,不是很常见),ApplicationUserLogin,ApplicationClaims…等。 请注意,我的示例取自我修改UserRoles使其包含公司的代码,因此声明上的代码有些复杂。

例如,您可能有:

public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{ // Code… }

或(未测试)

public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, IdentityUserRole<int>, IdentityUserClaim<int>>
{ // Code… }

然后替换所有子例程中的它们。如果是ShaneKm,他可能在DbContext或UserStore上保持不变:

public class ApplicationDbContext : IdentityDbContext<IdentityUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{ // Code … }

并将其固定为:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{ // Code … }

寻找缺少的替换项,右键单击“ IdentityUser” 公共类ApplicationUser:IdentityUser

2)有时您编译时并没有更新所有内容,因此旧的obj仍然引用已更改的代码。 WCF经常发生在我身上。您必须清理obj和bin目录(我将它们删除),以确保所有内容都重新编译。

希望这可以澄清。

答案 1 :(得分:0)

感谢@Jorge Rojas,我得以解决它。并非所有引用都被ApplicationUser取代。在我的容器中,我不需要进行任何更改。

相关问题