aspnet.core Заполнение данных с помощью UserManager <IdentityUser> - PullRequest
2 голосов
/ 26 сентября 2019

Я пытаюсь развернуть экземпляр Identity Server на основе http://docs.identityserver.io/en/latest/quickstarts/8_aspnet_identity.html и использую код из https://github.com/IdentityServer/IdentityServer4/tree/master/samples/Quickstarts/8_AspNetIdentity в качестве шаблона, но у меня возникают проблемы с получением начальных данных.

У меня есть мои program.cs и startup.cs в соответствии с примером приложения.Когда я вызываю

var userMgr = scope.ServiceProvider.GetRequiredService<UserManager<IdentityUser>>(); 

из метода SeedData.EnsureSeedData, который следует после

var services = new ServiceCollection();
            services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString));

            services.AddIdentity<IdentityUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();

            using var serviceProvider = services.BuildServiceProvider();
            using var scope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope();
            var context = scope.ServiceProvider.GetService<ApplicationDbContext>();
            context.Database.Migrate();

            var userMgr = scope.ServiceProvider.GetRequiredService<UserManager<IdentityUser>>();

, я получаю следующую ошибку.

Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger`1[Microsoft.AspNetCore.Identity.UserManager`1[Microsoft.AspNetCore.Identity.IdentityUser]]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[Microsoft.AspNetCore.Identity.IdentityUser]'.

Как мне зарегистрировать услуги для ILogger<UserManager<IdentityUser>>>?

Я чувствую, что упускаю что-то очевидное, но не вижу, что это такое.

1 Ответ

2 голосов
/ 26 сентября 2019

Вот как я заполняю данные, используя менеджер пользователей

public static void Main(string[] args)
        {
            try
            {
                var host = BuildWebHost(args);
                using (var scope = host.Services.CreateScope())
                {
                    var services = scope.ServiceProvider;
                    SeedData.Initialize(services).Wait();
                }

                host.Run();
            }
}

И в классе начальных данных

private static async Task SeedUser(User user, ApplicationDbContext context, IServiceProvider serviceProvider,
            string[] roles)
        {
            var password = new PasswordHasher<User>();
            var hashed = password.HashPassword(user, "123456");
            user.PasswordHash = hashed;
            var userStore = new UserStore<User>(context);

            await userStore.CreateAsync(user);
            await EnsureRole(serviceProvider, user.Email, roles);
            await context.SaveChangesAsync();
        }

Вы можете просмотреть мой полный код здесь

Дайте мне знать, если вам нужна помощь.

...