C# 无法解析类型为';Microsoft.AspNetCore.Identity.IRoleStore

C# 无法解析类型为';Microsoft.AspNetCore.Identity.IRoleStore,c#,asp.net-core,dependency-injection,asp.net-identity,C#,Asp.net Core,Dependency Injection,Asp.net Identity,我试图在我的ASP.NET核心MVC应用程序中植入UserRole,但它引发了以下异常 引发异常:Microsoft.Extensions.DependencyInjection.dll中的“System.InvalidOperationException” Microsoft.Extensions.DependencyInjection.dll中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理 尝试激活“Microsoft.AspNetC

我试图在我的ASP.NET核心MVC应用程序中植入UserRole,但它引发了以下异常

引发异常:Microsoft.Extensions.DependencyInjection.dll中的“System.InvalidOperationException” Microsoft.Extensions.DependencyInjection.dll中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理 尝试激活“Microsoft.AspNetCore.Identity.AspNetRoleManager1[Microsoft.AspNetCore.Identity.Identity.IdentityRole]”时,无法解析类型为“Microsoft.AspNetCore.Identity.IRoleStore]”的服务

添加服务
services.AddDbContext(选项=>
option.UseSqlServer(
GetConnectionString(“DefaultConnection”);
服务.附加性(选项=>{});
种子
private void CreateRoles(IServiceProvider服务提供者)
{
var rolemager=serviceProvider.GetRequiredService();
var userManager=serviceProvider.GetRequiredService();
.................
.................
}
我正在Startup.cs的
Configure()
中调用
CreateRoles()
它在
CreateRoles()
的第一行抛出上述异常。
异常是说这是DependencyInjection问题,我如何解决这个问题?

看起来您打算将Entity Framework Core用于ASP.NET Core标识持久化,但您还没有完全设置好<默认情况下,code>IRoleStore等未注册,因为这是允许使用不同持久性机制的扩展点。要在此处使用EF core,只需添加对的调用,如下所示:

services.AddIdentity<AppUser, IdentityRole>()
    .AddEntityFrameworkStores<AppDbContext>();
services.AddIdentity()
.AddEntityFrameworkStores();

如果不为DI创建作用域,我认为您会遇到此错误

假设您在
程序.cs中播种

var host = CreateWebHostBuilder(args).Build();

try
{
    var scope = host.Services.CreateScope(); <-- Need this

    var roleMgr = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

host.Run();
var host=CreateWebHostBuilder(args.Build();
尝试
{

var scope=host.Services.CreateScope();根据MSDN文档,最有效的方法是

    services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(
        Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>() <--Here!!!
     .AddEntityFrameworkStores<ApplicationDbContext>();
services.AddDbContext(选项=>
options.UseSqlServer(
GetConnectionString(“DefaultConnection”);
services.AddDefaultIdentity().AddRoles()
var host = CreateWebHostBuilder(args).Build();

try
{
    var scope = host.Services.CreateScope(); <-- Need this

    var roleMgr = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

host.Run();
    services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(
        Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>() <--Here!!!
     .AddEntityFrameworkStores<ApplicationDbContext>();