为我的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指定配置
答案 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取代。在我的容器中,我不需要进行任何更改。