初始化AppRoles时遇异常:无法从根解析RoleManager作用域服务
问题解决:无法解析RoleManager作用域服务异常
错误原因
RoleManager<IdentityRole>属于作用域生命周期服务,根服务提供者(app.Services)无法解析这类服务,必须从你创建的作用域内部的服务提供者获取。你的代码错误地直接从根容器获取了RoleManager,导致抛出异常。
修正后的代码
using (var serviceScope = app.Services.CreateScope()) { var services = serviceScope.ServiceProvider; var dbContext = services.GetRequiredService<AppDbContext>(); dbContext.Database.EnsureCreated(); // 关键改动:从作用域内的services获取RoleManager,而非根容器app.Services var roleManager = services.GetRequiredService<RoleManager<IdentityRole>>(); if (!await roleManager.RoleExistsAsync(AppRoles.User)) { await roleManager.CreateAsync(new IdentityRole(AppRoles.User)); } if (!await roleManager.RoleExistsAsync(AppRoles.Editor)) { await roleManager.CreateAsync(new IdentityRole(AppRoles.Editor)); } if (!await roleManager.RoleExistsAsync(AppRoles.Administrator)) { await roleManager.CreateAsync(new IdentityRole(AppRoles.Administrator)); } }
额外注意事项
确保你的Program.cs(或Startup类)已经正确配置Identity角色服务,否则即使修正获取方式,依然可能出现服务无法找到的问题,示例配置代码:
builder.Services.AddDefaultIdentity<IdentityUser>() .AddRoles<IdentityRole>() // 必须添加此行启用角色管理功能 .AddEntityFrameworkStores<AppDbContext>();
内容的提问来源于stack exchange,提问作者Abdulfatai Abdulrahman
相关产品推荐
相关产品推荐

