如何使用身份?

时间:2018-08-23 06:26:52

标签: c# asp.net-mvc asp.net-core

说明

我正在以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]'。

我做错了什么?

注意:我只添加了相关代码。

1 个答案:

答案 0 :(得分:1)

您的代码中有两个问题:

  1. RoleManager<IdentityRole>解析root provider
  2. SeedAsync将导致对象处置错误。

请尝试以下步骤解决您的问题:

  1. IServiceProvider添加到Configure

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
    
  2. SeedAsyncvoid修改为Task

        public async Task SeedAsync()
    
  3. SeedAsync致电Configure

    new UserRoleSeed(serviceProvider.GetService<RoleManager<IdentityRole>>()).SeedAsync().Wait();