我正在尝试在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.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的CreateRoles()
内叫Configure()
并在CreateRoles()
的第一行引发上述异常。
异常是DependencyInjection问题,我该如何解决?
答案 0 :(得分:2)
您似乎打算将Entity Framework Core用于ASP.NET Core Identity持久性,但是您尚未对此进行设置。 IRoleStore
等人默认情况下未注册,因为这是允许使用不同持久机制的扩展点。为了在这里使用EF核心,您只需要向AddEntityFrameworkStores
添加一个调用,就像这样:
services.AddIdentity<AppUser, IdentityRole>()
.AddEntityFrameworkStores<AppDbContext>();
答案 1 :(得分:0)
我认为,如果不为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();
答案 2 :(得分:0)
根据MSDN文档,最有效的方法是
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>() <--Here!!!
.AddEntityFrameworkStores<ApplicationDbContext>();