AggregateException: произошла одна или несколько ошибок.(Не удается разрешить тип области) - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь заполнить базу данных Identity статическим классом.

Вот мой метод заполнения:

public static async Task CreateIdentityUsers(IServiceProvider service,IConfiguration configuration)
        {


            var userManager = service.GetRequiredService<UserManager<AlGecUser>>();
            var roleManager = service.GetRequiredService<RoleManager<AlGecRole>>();

            var username = configuration["Data:AdminUser:username"];
            var email = configuration["Data:AdminUser:email"];
            var password = configuration["Data:AdminUser:password"];
            var role = configuration["Data:AdminUser:role"];

            if (await userManager.FindByNameAsync(username) == null)
            {
                if (await roleManager.FindByNameAsync(role) == null)
                {
                    await roleManager.CreateAsync(new AlGecRole(role));
                }

                AlGecUser user = new AlGecUser()
                {
                    UserName = username,
                    Email = email,
                    Name = "SampleName",
                    Surname = "SampleSurname"
                };

                IdentityResult result = await userManager.CreateAsync(user, password);

                if (result.Succeeded)
                {
                    await userManager.AddToRoleAsync(user, role);
                }

            }

        }

При запуске я вызываю этот метод следующим образом:

 SeedIdentity.CreateIdentityUsers(app.ApplicationServices, Configuration).Wait();

Вот мой метод запуска:

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<AlGecDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MainRepositoryCS")));
        services.AddDbContext<AlGecIdentityDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("IdentityRepositoryCS")));

        services.AddIdentity<AlGecUser,AlGecRole>()
            .AddEntityFrameworkStores<AlGecIdentityDbContext>()
            .AddDefaultTokenProviders();

        services.AddTransient<IProductRepository, EfProductRepository>();
        services.AddTransient<IUnitOfWork, EfUnitOfWork>();
        services.AddTransient<IAdvertisementRepository, EfAdvertisementRepository>();
        services.AddTransient<ICategoryRepository, EfCategoryRepository>();
        services.AddTransient<ISubCategoryRepository, EfSubCategoryRepository>();
        services.AddTransient<ICartService, CartService>();
        services.AddTransient<ICartSessionService, CartSessionService>();
        services.AddTransient<IHttpContextAccessor, HttpContextAccessor>();

        services.AddSession();
        services.AddMvc();
    }
  public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseSession();
    app.UseAuthentication();
    app.UseStaticFiles();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
    });

    SeedIdentity.CreateIdentityUsers(app.ApplicationServices, Configuration).Wait();
}

Но когда я пытаюсь открыть свой веб-сайт, он выдает ошибку под названием

AggregateException: One or more errors occurred. (Cannot resolve scoped service 'Microsoft.AspNetCore.Identity.UserManager`1[AlGec.ECommerce.WebUI.IdentityCore.AlGecUser]' from root provider.)

Как я могу исправитьэто?

1 Ответ

0 голосов
/ 10 мая 2019

Ваши начальные данные должны быть добавлены не при запуске, а с помощью команды ef migrations.Пусть это сделает работу, для которой оно было предназначено.Если вам нужно убедиться, что данные существуют при запуске, изучите запуск миграций при запуске.

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