Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试激活Identity.IdentityUserManager时,无法解析Identity.IdentityUserStore类型的服务_C#_Asp.net Core_.net Core_Identity_Asp.net Core Identity - Fatal编程技术网

C# 尝试激活Identity.IdentityUserManager时,无法解析Identity.IdentityUserStore类型的服务

C# 尝试激活Identity.IdentityUserManager时,无法解析Identity.IdentityUserStore类型的服务,c#,asp.net-core,.net-core,identity,asp.net-core-identity,C#,Asp.net Core,.net Core,Identity,Asp.net Core Identity,我正试图在一个现有数据库未使用Identity的项目上使用ASP.NET Core Identity 3.0。所以我需要做一些定制,因为我想做一些更复杂的操作 这是使用.NETCore3.1完成的 但当我现在运行解决方案时,会出现以下两个异常: InvalidOperationException:验证服务描述符“ServiceType:Microsoft.AspNetCore.Identity.ISecurityStampValidator生存期:作用域实现类型:Microsoft.AspNet

我正试图在一个现有数据库未使用Identity的项目上使用ASP.NET Core Identity 3.0。所以我需要做一些定制,因为我想做一些更复杂的操作

这是使用.NETCore3.1完成的

但当我现在运行解决方案时,会出现以下两个异常:

InvalidOperationException:验证服务描述符“ServiceType:Microsoft.AspNetCore.Identity.ISecurityStampValidator生存期:作用域实现类型:Microsoft.AspNetCore.Identity.SecurityStampValidator`1[ForumProject.Data.Identity.Identity ForumUser]时出错“:在尝试激活”ForumProject.Data.Identity.Identity.IdentityUserManager“时,无法解析类型为”ForumProject.Data.Identity.IdentityUserStore“的服务。

InvalidOperationException:在尝试激活“ForumProject.Data.Identity.IdentityUserStore”时,无法解析“ForumProject.Data.Identity.IdentityUserStore”类型的服务。

我不知道我做错了什么,在我添加UserStore之前它一直在工作,所以我一定是创建错了,但到目前为止,我找不到问题所在

我在startup.cs的ConfigureServices中设置了此选项:

public void配置服务(IServiceCollection服务)
{
services.addScope();
services.AddDbContext(选项=>
options.UseSqlServer(Configuration.GetConnectionString(“ForumDatabase”));
services.AddDbContext(选项=>
options.UseSqlServer(Configuration.GetConnectionString(“ForumDatabase”));
//services.AddIdentity().AddEntityFrameworkStores().AddDefaultTokenProviders();
服务.附加性(选项=>
{
options.SignIn.RequireConfirmedAccount=false;
options.Password.RequiredLength=2;
options.Password.RequireDigit=false;
options.Password.RequireLowercase=false;
options.Password.RequiredUniqueChars=0;
options.Password.RequireNonAlphanumeric=false;
options.Password.RequireUppercase=false;
})
//.AddRoles()
.AddUserStore()
.AddUserManager()
//.AddSignInManager()的名称
.AddEntityFrameworkStores();
services.AddMvc();
services.AddControllersWithViews();
services.AddRazorPages();
}
以下是IdentityForumUser、IdentityForumRole和IdentityDatabaseContext:

public class IdentityForumUser:IdentityUser
{
[列(“用户名”)]
公共重写字符串用户名{get;set;}
[列(“密码”)]
公共重写字符串密码哈希{get;set;}
public int ThemeId{get;set;}=1;///TODO:将其设置为拾取的默认值
public int ChatStatus{get;set;}=0;
public DateTime RegistrationDate{get;set;}=DateTime.UtcNow;
公共bool DynamicMode{get;set;}=false;
public DateTime LastActivity{get;set;}=DateTime.UtcNow;
}
公共类标识FORUMROLE:IdentityRole
{
}
公共类IdentityDatabaseContext:IdentityDbContext
{
公共标识DatabaseContext(DbContextOptions)
:基本(选项)
{
}
模型创建时受保护的覆盖无效(ModelBuilder)
{
基于模型创建(生成器);
builder.Entity()
.Ignore(c=>c.LockoutEnd)
.忽略(c=>c.TwoFactorEnabled)
.Ignore(c=>c.phonenumberconfirm)
.Ignore(c=>c.PhoneNumber)
.Ignore(c=>c.ConcurrencyStamp)
.忽略(c=>c.E)
.Ignore(c=>c.NormalizedEmail)
//.Ignore(c=>c.NormalizedUserName)
.Ignore(c=>c.LockoutEnabled)
.Ignore(c=>c.AccessFailedCount)
.ToTable(“用户”);
builder.Entity()
.Ignore(c=>c.ConcurrencyStamp)
.ToTable(“角色”);
}
}
这是IdentityUserStore,IdentityUserManager:

public class IdentityUserStore:UserStore
{
public IdentityUserStore(IdentityDatabaseContext,IdentityErrorDescriber descripber=null):基(context,descripber)
{
}
}
公共类标识UserManager:UserManager
{
公共标识服务器管理器(标识服务器存储、IOptions选项访问器、,
IPasswordHasher密码hasher,IEnumerable用户验证程序,
IEnumerable PasswordValidator、ILookupNormalizer、keyNormalizer、,
IdentityErrorDescriptber错误,iSeries虚拟Provider服务,ILogger记录器)
:base(存储、选项访问器、密码哈希器、用户验证器、密码验证器、密钥规范化器、错误、服务、记录器)
{
}
公共覆盖布尔支持SUSERCLAIM
{
得到
{
ThrowIfDisposed();
返回false;
}
}
}
这是IdentityPasswordHasher,但只是它的一部分,我将注释掉逻辑本身,我不确定这是否相关:

公共类标识PasswordHasher:PasswordHasher
{
专用只读密码哈希兼容模式兼容模式;
公共标识PasswordHasher(IOOptions Accessor=null)
:base(选项访问器)
{
var options=optionAccessor?.Value??新密码hasher选项();
_compatibilityMode=选项。compatibilityMode;
}
公共重写字符串HashPassword(IdentityForumUser用户,字符串密码)
{
//自定义哈希代码
}
public override PasswordVerificationResult VerifyHashedPassword(用户标识、字符串hashedPassword、字符串providedPassword)
{
//自定义验证码
}
}

IdentityUserManager
的构造函数中,我将其更改为使用
IUserStore存储
,而不是
IdentityUserStore存储
(我的自定义类)

这使得它可以工作,并且仍然使用我的自定义存储类。 然而,我