无法解析类型为'Microsoft.AspNetCore.Identity.IRoleStore的服务

Sab*_*ain 4 c# dependency-injection asp.net-identity asp.net-core

我正在尝试在我的ASP.NET Core MVC App中播种UserRole,但是它引发以下异常。

引发异常:Microsoft.Extensions.DependencyInjection.dll中的“ System.InvalidOperationException”。Microsoft.Extensions.DependencyInjection.dll中发生了类型“ System.InvalidOperationException”的异常,但未在用户代码中处理无法解析类型为“ Microsoft”的服务。 AspNetCore.Identity.IRoleStore 1[Microsoft.AspNetCore.Identity.IdentityRole]' while attempting to activate 'Microsoft.AspNetCore.Identity.AspNetRoleManager1 [Microsoft.AspNetCore.Identity.IdentityRole]'。

添加服务

services.AddDbContext<AppDbContext>(option =>
               option.UseSqlServer(
               Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<AppUser, IdentityRole>(options => { }); 
Run Code Online (Sandbox Code Playgroud)

种子

private void CreateRoles(IServiceProvider serviceProvider)
{
    var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
    var userManager = serviceProvider.GetRequiredService<UserManager<SchoolUser>>();
        .................
        .................
}
Run Code Online (Sandbox Code Playgroud)

我在Startup.cs 的CreateRoles()内部调用Configure(),它在的第一行抛出上述异常CreateRoles()。异常是DependencyInjection问题,我该如何解决?

Kir*_*kin 6

看起来您打算将Entity Framework Core用于ASP.NET Core Identity持久性,但是您尚未对此进行设置。IRoleStore等人默认情况下未注册,因为这是允许使用不同持久机制的扩展点。为了在这里使用EF核心,您只需要向添加一个调用AddEntityFrameworkStores,如下所示:

services.AddIdentity<AppUser, IdentityRole>()
    .AddEntityFrameworkStores<AppDbContext>();
Run Code Online (Sandbox Code Playgroud)