c# - 无法解析类型为“Microsoft.AspNetCore.Identity.IRoleStore”的服务

标签 c# asp.net-core dependency-injection asp.net-identity

我试图在我的 ASP.NET Core 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.AspNetRoleManager1[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 身份持久性,但您尚未完全设置它。 IRoleStore 等默认情况下未注册,因为这是允许使用不同持久性机制的扩展点。为了在这里使用 EF 核心,您只需要添加对 AddEntityFrameworkStores 的调用,像这样:

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

关于c# - 无法解析类型为“Microsoft.AspNetCore.Identity.IRoleStore”的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53470623/

相关文章:

dependency-injection - 依赖注入(inject) : How to inject when using a multi-project solution

c# - 如何在抽象类中使用构造函数注入(inject)?

c# - 回发与 Javascript 客户端计算

c# - HTTP 请求处于挂起状态,直到执行 MediatR 通知

Javascript 对象作为空对象 "Uncaught ReferenceError: data is not defined"传递给 Controller

asp.net-core - 是否可以/建议使用 EFCore 2.1 数据播种系统为用户/角色播种?

php - 如何从类工厂方法添加 Symfony 依赖注入(inject)容器构建器的定义?

C# 从 RSA PEM 私钥中提取公钥

c# - 使用秒表对应用程序使用情况进行基准测试

c# - 来自非 Controller 类的 ActionResult