Заполнение ролей и пользователей ASP.NET Core 2

public class DbInitializer 
{
    public static async Task CreateAdmin(IServiceProvider service)
    {
        UserManager<AppUser> userManager = service.GetRequiredService<UserManager<AppUser>>();
        RoleManager<IdentityRole> roleManager = service.GetRequiredService<RoleManager<IdentityRole>>();

        string username = "Admin";
        string email = "[email protected]";
        string pass = "Secrete90";
        string role = "Admins";

        if(await userManager.FindByNameAsync(username)== null)
        {
            if(await roleManager.FindByNameAsync(role)== null)
            {
                await roleManager.CreateAsync(new IdentityRole(role));
            }
            var user = new AppUser { UserName = username, Email = email };

            var result = await userManager.CreateAsync(user, pass);
            if (result.Succeeded) { await userManager.AddToRoleAsync(user, role); }
        }
    }

Когда я запускаю этот код при запуске, я получаю сообщение об ошибке о том, что не могу определить область действия кода в классе запуска.

DbInitializer.CreateAdmin(app.ApplicationServices).Wait();

person DERK    schedule 19.09.2017    source источник
comment
stackoverflow.com/questions/45805561/ это может вам помочь   -  person Earl_Grek    schedule 26.09.2017


Ответы (1)


При вызове .NET Core 2 начальную логику необходимо перенести в метод Main класса program.cs.

Пример Program.cs

public static void Main(string[] args) {
    var host = BuildWebHost(args);
    using (var scope = host.Services.CreateScope()) {
        var services = scope.ServiceProvider;
        var userManager = services.GetRequiredService<UserManager<AppUser>>();
        var roleManager = services.GetRequiredService<RoleManager<IdentityRole>>();
        DbInitializer.CreateAdmin(userManager, roleManager).Wait();
    }
    host.Run();
}

Обновленный ДбИнициализатор

public class DbInitializer 
{
    public static async Task CreateAdmin(UserManager<AppUser> userManager, RoleManager<IdentityRole> roleManager)
    {

        string username = "Admin";
        string email = "[email protected]";
        string pass = "Secrete90";
        string role = "Admins";

        if(await userManager.FindByNameAsync(username)== null)
        {
            if(await roleManager.FindByNameAsync(role)== null)
            {
                await roleManager.CreateAsync(new IdentityRole(role));
            }
            var user = new AppUser { UserName = username, Email = email };

            var result = await userManager.CreateAsync(user, pass);
            if (result.Succeeded) { await userManager.AddToRoleAsync(user, role); }
        }
    }
person Paul    schedule 25.01.2018