说明
我正在以ASP.NET Core
模式学习MVC
,并试图为我的用户创建自定义Roles
。
代码
为此,我在ConfigureServices
的{{1}}方法内进行设置:
Identity
然后在public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyAppContext>(options => options.UseSqlServer(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=MyApp;Integrated Security=True;Connect Timeout=30;"));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<MyAppContext>()
.AddDefaultTokenProviders();
}
方法中声明:
Configure
基本上,我使用public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
new UserRoleSeed(app.ApplicationServices.GetService<RoleManager<IdentityRole>>()).SeedAsync();
}
来传递Dependency Injection
构造函数中的RoleManager
,该构造函数是角色的配置类:
UserRoleSeed
启动应用程序时出现此错误:
System.InvalidOperationException:'无法从根提供程序解析作用域服务'Microsoft.AspNetCore.Identity.RoleManager`1 [Microsoft.AspNetCore.Identity.IdentityRole]'。
我做错了什么?
注意:我只添加了相关代码。
答案 0 :(得分:1)
您的代码中有两个问题:
RoleManager<IdentityRole>
解析root provider
SeedAsync
将导致对象处置错误。 请尝试以下步骤解决您的问题:
将IServiceProvider
添加到Configure
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
将SeedAsync
从void
修改为Task
public async Task SeedAsync()
从SeedAsync
致电Configure
new UserRoleSeed(serviceProvider.GetService<RoleManager<IdentityRole>>()).SeedAsync().Wait();