Как зарегистрировать RoleManager в Startup.cs в ASP.NET Core - PullRequest
0 голосов
/ 25 февраля 2019

Когда я запускаю свое приложение в режиме отладки, мой метод семени не работает из-за «отсутствующей» службы.Сообщение об ошибке:

Нет службы для типа 'Microsoft.AspNetCore.Identity.RoleManager`1 [Microsoft.AspNetCore.Identity.IdentityRole]'.

Может ли кто-нибудь помочь мне правильно зарегистрировать эту услугу в классе StartUp.cs?Спасибо!

RolesConfig.cs

public static class RolesConfig
{

    public static async Task InitialiseAsync(ApplicationDbContext context, IServiceProvider serviceProvider)
    {
        var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
        string[] roleNames = {"Admin", "Report", "Search"};
        foreach (var roleName in roleNames)
        {
            var roleExist = await roleManager.RoleExistsAsync(roleName);
            if (!roleExist)
                await roleManager.CreateAsync(new IdentityRole(roleName));
        }
    }
}

Startup.cs

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    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.AddHttpClient();
        services.AddHttpClient<IExceptionServiceClient, ExceptionServiceClient>();

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

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

В вашем методе ConfigureServices вы уже вызываете AddDefaultIdentity, который является новым дополнением в 2.1, поддерживающим идентификацию без поддержки ролей.Чтобы добавить поддержку ролей и, следовательно, RoleManager в коллекцию служб, измените код, как показано ниже:

services.AddDefaultIdentity<IdentityUser>()
  .AddEntityFrameworkStores<ApplicationDbContext>()
  .AddRoles<IdentityRole>();
0 голосов
/ 25 февраля 2019

Я думаю, что вы пропустили вызов AddRoleManager.Вот аналогичная настройка, которую я имел, попробуйте:

        services.AddIdentity<IdentityUser, IdentityRole>(o => {
            o.Password.RequiredLength = 8;
        })
        .AddRoles<IdentityRole>()
        .AddRoleManager<RoleManager<IdentityRole>>()
        .AddDefaultTokenProviders()
        .AddEntityFrameworkStores<ApplicationDbContext>();
0 голосов
/ 25 февраля 2019

Скорее всего, вам нужно добавить

services.AddIdentity<IdentityUser, IdentityRole>(config =>
{
        config.Password.RequireNonAlphanumeric = false; //optional
        config.SignIn.RequireConfirmedEmail = true; //optional
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();

в вашем методе ConfigureServices в Startup.cs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...