Невозможно разрешить службу для ISystemClock при попытке активировать SecurityStampValidator

Я пытаюсь добавить удостоверение в свой веб-API, но получаю эту ошибку

InvalidOperationException: невозможно разрешить службу для типа> 'Microsoft.AspNetCore.Authentication.ISystemClock' при попытке активировать> 'Microsoft.AspNetCore.Identity.SecurityStampValidator`1 [WebAPI.Models.User>]'.

после добавления Identity в Startup.cs, где у меня это

services.AddIdentityCore<User>(options => { });
            new IdentityBuilder(typeof(User), typeof(IdentityRole), services)
                .AddRoleManager<RoleManager<IdentityRole>>()
                .AddSignInManager<SignInManager<User>>()
                .AddEntityFrameworkStores<DataContext>();

app.UseAuthentication();

Класс usermodel пуст. Все загружено в базу данных. Чего не хватает? Я ценю ваше время и помощь.


person Hills    schedule 11.10.2019    source источник


Ответы (1)


ISystemClock обычно регистрируется в вызове AddAuthentication. здесь.

Или вместо этого вы можете вызвать AddDefaultIdentity, который, в свою очередь, вызывает сам AddAuthentication. ".

Рекомендуется использовать один из этих механизмов, а не AddIdentityCore. Однако, если вам по какой-то причине необходимо позвонить в AddIdentityCore, вы можете зарегистрировать часы самостоятельно:

services.TryAddSingleton<ISystemClock, SystemClock>();

Тем не менее, вы также можете столкнуться с другими вещами для регистрации, о которых позаботятся вышеупомянутые методы. См. Также этот вопрос и ответ на него.

Что касается того, что это такое - интерфейс ISystemClock предназначен для получения текущего времени. Реализация SystemClock получает реальное время от компьютера (просто вызывая DateTimeOffset.UtcNow). Однако при тестировании это позволяет реализации «фальшивых часов» передавать различные значения текущего момента, проверяя такие сценарии, как високосные дни и другую временную бизнес-логику. Такой узор часто называют «виртуальными часами» или «имитацией часов».

person Matt Johnson-Pint    schedule 11.10.2019