2 回答

TA贡献1798条经验 获得超3个赞
问题是,您尝试在不创建作用域的情况下从中检索作用域服务。有趣的是,您在对 的调用周围创建了一个作用域,但随后传入 了 未限定作用域。IServiceProvider
Seed.CreateRoles
IServiceProvider
您应该做的是传入并在方法中创建作用域,或者将作用域创建保留在现在的位置,而是传入作用域服务,即 和。IServiceProvider
Seed.CreateRoles
RoleManager
UserManager
编辑
您需要执行下列操作之一:
注入,然后在种子方法中创建您的范围:IServiceProvider
var host = CreateWebHostBuilder(args).Build();
Seed.CreateRoles(host.Services);
host.Run();
然后:
public static async Task CreateRoles(IServiceProvider services) {
var configuration = services.GetRequiredService<IConfiguration>();
using (var scope = services.CreateScope())
{
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<IdentityUser>>();
// seed data
}
}
注入您的作用域服务:
var host = CreateWebHostBuilder(args).Build();
var configuration = host.Services.GetRequiredService<IConfiguration>();
using (var scope = host.Services.CreateScope())
{
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<IdentityUser>>();
Seed.CreateRoles(configuration, roleManager, userManager);
}
host.Run();

TA贡献1795条经验 获得超7个赞
运行代码会在以下行中显示异常:
var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
根据异常,您似乎缺少文件中的配置来启用标识。我看不到你的,但我怀疑你错过了整个电话。startup.cs
startup.cs
services.AddIdentity(...)
我建议您花一些时间阅读如何在 ASP.NET 核心中配置标识。Microsoft Docs 始终是一个很好的起点。
此外,您在问题中提到的第二个问题有很好的步骤。您特别需要查看步骤 2 和步骤 3。
- 2 回答
- 0 关注
- 104 浏览
添加回答
举报