无法解析类型 'Microsoft.AspNetCore.Identity.IRoleStore 的服务
Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IRoleStore
我试图在我的 ASP.NET 核心 MVC 应用程序中植入 UserRole,但它抛出了以下异常。
Exception thrown: 'System.InvalidOperationException' in Microsoft.Extensions.DependencyInjection.dll
An exception of type 'System.InvalidOperationException' occurred in Microsoft.Extensions.DependencyInjection.dll but was not handled in user code
Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IRoleStore1[Microsoft.AspNetCore.Identity.IdentityRole]' while attempting to activate 'Microsoft.AspNetCore.Identity.AspNetRoleManager
1[Microsoft.AspNetCore.Identity.IdentityRole]'.
添加服务
services.AddDbContext<AppDbContext>(option =>
option.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<AppUser, IdentityRole>(options => { });
种子
private void CreateRoles(IServiceProvider serviceProvider)
{
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var userManager = serviceProvider.GetRequiredService<UserManager<SchoolUser>>();
.................
.................
}
我正在调用 Startup.cs 的 Configure()
中的 CreateRoles()
并在 CreateRoles()
的第一行抛出上述异常。
异常说是DependencyInjection问题,请问如何解决?
您似乎打算使用 Entity Framework Core 来实现 ASP.NET Core Identity 持久性,但您还没有完全设置它。 IRoleStore
等默认情况下未注册,因为这是允许使用不同持久性机制的扩展点。为了在这里使用 EF 核心,您只需要添加对 AddEntityFrameworkStores
的调用,如下所示:
services.AddIdentity<AppUser, IdentityRole>()
.AddEntityFrameworkStores<AppDbContext>();
我认为如果不为 DI 创建作用域,您会遇到此错误。
假设您在 Program.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();
根据MSDN文档,最有效的方法是
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>() <--Here!!!
.AddEntityFrameworkStores<ApplicationDbContext>();
我试图在我的 ASP.NET 核心 MVC 应用程序中植入 UserRole,但它抛出了以下异常。
Exception thrown: 'System.InvalidOperationException' in Microsoft.Extensions.DependencyInjection.dll An exception of type 'System.InvalidOperationException' occurred in Microsoft.Extensions.DependencyInjection.dll but was not handled in user code Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IRoleStore
1[Microsoft.AspNetCore.Identity.IdentityRole]' while attempting to activate 'Microsoft.AspNetCore.Identity.AspNetRoleManager
1[Microsoft.AspNetCore.Identity.IdentityRole]'.
添加服务
services.AddDbContext<AppDbContext>(option =>
option.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<AppUser, IdentityRole>(options => { });
种子
private void CreateRoles(IServiceProvider serviceProvider)
{
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var userManager = serviceProvider.GetRequiredService<UserManager<SchoolUser>>();
.................
.................
}
我正在调用 Startup.cs 的 Configure()
中的 CreateRoles()
并在 CreateRoles()
的第一行抛出上述异常。
异常说是DependencyInjection问题,请问如何解决?
您似乎打算使用 Entity Framework Core 来实现 ASP.NET Core Identity 持久性,但您还没有完全设置它。 IRoleStore
等默认情况下未注册,因为这是允许使用不同持久性机制的扩展点。为了在这里使用 EF 核心,您只需要添加对 AddEntityFrameworkStores
的调用,如下所示:
services.AddIdentity<AppUser, IdentityRole>()
.AddEntityFrameworkStores<AppDbContext>();
我认为如果不为 DI 创建作用域,您会遇到此错误。
假设您在 Program.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();
根据MSDN文档,最有效的方法是
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>() <--Here!!!
.AddEntityFrameworkStores<ApplicationDbContext>();