ASP.NET Core 2.1角色管理器注册 [英] ASP.NET Core 2.1 Role Manager Register

查看:92
本文介绍了ASP.NET Core 2.1角色管理器注册的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的播种代码中,我创建了用户和角色,并且错误似乎是每当我在启动时运行它时,我似乎都会得到

In my seeding code I create Users and Roles, and the error seems to be whenever I run it through startup I seem to be getting

没有注册类型为Microsoft.AspNetCore.Identity.RoleManager'1[Microsoft.AspNetCore.Identity.IdentityRole]的服务.

编辑*** 我认为问题在于Identityhostingstartup中的代码未得到执行,这是由脚手架标识创建的.

SeedDb.cs

SeedDb.cs

public static void CreateRolesAndUsers(IServiceProvider serviceProvider)
    {
        var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
        var userManager = serviceProvider.GetRequiredService<UserManager<AppUser>>();
        var context = serviceProvider.GetService<AuthContext>();
        var configuration = serviceProvider.GetService<IConfiguration>();

        //context.Database.EnsureCreated();
        context.Database.Migrate();

        Task<IdentityResult> roleResult;
        string email = configuration["Admin:Email"];

        //Check that there is an Administrator role and create if not
        Task<bool> hasAdminRole = roleManager.RoleExistsAsync(Roles.ADMIN);
        hasAdminRole.Wait();

        if (!hasAdminRole.Result)
        {
            roleResult = roleManager.CreateAsync(new IdentityRole(Roles.ADMIN));
            roleResult.Wait();
        }

        //Check if the admin user exists and create it if not
        //Add to the Administrator role
        Task<AppUser> testUser = userManager.FindByEmailAsync(email);
        testUser.Wait();

        if (testUser.Result == null)
        {
            CreateAdminUser(userManager, email, configuration["Admin:Password"]);
        }
        else if (configuration.GetValue<bool>("Admin:Reset") == true)
        {
            userManager.DeleteAsync(testUser.Result);
            CreateAdminUser(userManager, email, configuration["Admin:Password"]);
        }

    }

    private static void CreateAdminUser(UserManager<AppUser> userManager, string email, string password)
    {
        AppUser user = new AppUser
        {
            Email = email,
            UserName = email
        };

        Task<IdentityResult> newUser = userManager.CreateAsync(user, password);
        newUser.Wait();

        if (newUser.Result.Succeeded)
        {
            Task<IdentityResult> newUserRole = userManager.AddToRoleAsync(user, Roles.ADMIN);
            newUserRole.Wait();
        }
    }

IdentityHostingStartup.cs

IdentityHostingStartup.cs

enter [assembly: HostingStartup(typeof(WebApp.Areas.Identity.IdentityHostingStartup))]
namespace WebApp.Areas.Identity
{
    public class IdentityHostingStartup : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            builder.ConfigureServices((context, services) => {
            });
        }
    }
}

Startup.cs

Startup.cs

 public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>();

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

我得到的完整错误消息是这个

The full error message I get is this

System.InvalidOperationException
  HResult=0x80131509
  Message=No service for type 'Microsoft.AspNetCore.Identity.RoleManager`1[Microsoft.AspNetCore.Identity.IdentityRole]' has been registered.
  Source=Microsoft.Extensions.DependencyInjection.Abstractions

 StackTrace:

 at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions. GetRequiredService(IServiceProvider provider, Type serviceType) 
    at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions. GetRequiredService[T](IServiceProvider provider)
   at b.Data.SeedAuth.CreateRolesAndUsers(IServiceProvider serviceProvider) in C:\Users\\source\repos\b\b\Data\SeedAuth.cs:line 17
   at b.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider) in C:\Users\\source\repos\b\b\Startup.cs:line 65

推荐答案

您尚未在DI容器中注册角色服务.这行:

You haven't registered the role services in the DI container. This line:

services.AddDefaultIdentity<AppUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

需要通过使用 查看全文

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆