MS Identity не работает при обновлении до Core 3.0 - PullRequest
0 голосов
/ 30 октября 2019

следующий код get usermanager работал нормально в моем Core 2.x:

static void Main(string[] args)
{
    var builder = new ConfigurationBuilder()
      .SetBasePath(Directory.GetCurrentDirectory())
      .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
      .Build();

    var services = new ServiceCollection();
    string connectionString = builder.GetConnectionString("DefaultConnection");
    services.AddDbContext<UserDbContext>(options => options.UseSqlServer(connectionString));
    services.AddIdentity<UserEntity, GroupEntity>(options =>
    {
        options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(10);
        options.Password.RequireDigit = true;
        options.Password.RequiredUniqueChars = 0;
        options.Password.RequireLowercase = false;
        options.Password.RequireUppercase = false;
        options.Password.RequireNonAlphanumeric = false;
    })
    .AddEntityFrameworkStores<UserDbContext>()
    .AddDefaultTokenProviders();

    var provider = services.BuildServiceProvider();
    var context = provider.GetService<UserDbContext>();
    var userManager = provider.GetService<UserManager<UserEntity>>();
    var roleManager = provider.GetService<RoleManager<GroupEntity>>();
}

, но когда я обновляюсь до Core 3.0, следующее исключение броска строки:

var userManager = provider.GetService<UserManager<UserEntity>>();

с сообщением

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

Я обновил пакеты, но тоже не работает. Так что мне делать после обновления до Core 3.0?

1 Ответ

0 голосов
/ 31 октября 2019

Ilogger, кажется, не регистрируется автоматически в Core 3.0

Вам нужна служба ILogger

var provider = services.BuildServiceProvider();
var logger = provider.GetService<ILogger<Program>>();
services.AddSingleton<ILogger>(logger);
...