![](/img/trans.png)
[英]InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.RoleManage
[英]Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IRoleStore
我正在尝试在我的ASP.NET核心MVC应用程序中播放UserRole,但它抛出了以下异常。
抛出异常:Microsoft.Extensions.DependencyInjection.dll中的'System.InvalidOperationException'Microsoft.Extensions.DependencyInjection.dll中出现类型'System.InvalidOperationException'的异常,但未在用户代码中处理无法解析类型'Microsoft的服务。
1[Microsoft.AspNetCore.Identity.IdentityRole]' while attempting to activate 'Microsoft.AspNetCore.Identity.AspNetRoleManager
1 [Microsoft.AspNetCore.Identity.IdentityRole]'时AspNetCore.Identity.IRoleStore1[Microsoft.AspNetCore.Identity.IdentityRole]' while attempting to activate 'Microsoft.AspNetCore.Identity.AspNetRoleManager
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核心身份持久性,但是您还没有完全设置它。 IRoleStore
等未默认注册,因为这是允许使用不同持久性机制的扩展点。 要在此处使用EF核心,您只需要添加对AddEntityFrameworkStores
的调用,如下所示:
services.AddIdentity<AppUser, IdentityRole>()
.AddEntityFrameworkStores<AppDbContext>();
根据MSDN文档,最有效的方法是
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>() <--Here!!!
.AddEntityFrameworkStores<ApplicationDbContext>();
如果您没有为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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.