Внедрение зависимостей SignInManager завершается с помощью ASP.NET Core 2 - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь получить доступ к Microsoft.AspNetCore.Identity.SignInManager в одном из моих классов, который не является контроллером.

В Startup.ConfigureServices () у меня есть:

services.AddIdentity<IdentityUser, IdentityRole>();

В моем классе у меня есть:

public class Auth : IAuth
{
    ...
    private readonly SignInManager<IdentityUser> _signInManager;

    public Auth(..., SignInManager<IdentityUser> signInManager)
    {
    }
}

И я получаю это исключение:

Произошло необработанное исключение при обработке запроса.InvalidOperationException: Невозможно разрешить службу для типа 'Microsoft.AspNetCore.Identity.IUserStore 1[Microsoft.AspNetCore.Identity.IdentityUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.AspNetUserManager 1 [Microsoft.AspNetCore.Identity.IdentityUser]'.

Обратите внимание, что я даже не ссылаюсь на переданный SignInManager объект в конструкторе (я его удалил, чтобы упростить).Если я удаляю параметр SignInManager из конструктора, все работает нормально.

Все соответствующие примеры, которые я видел в сети, заканчиваются тем, что указанный пользователем тип данных SignInManager в вызове AddIdentity() не соответствует типу пользовательских данных в параметре конструктора, но в моем коде это не так.

Чтение статей и примера кода для этого заставляет думать, что это должно быть простой задачей.Другие параметры, введенные моим конструктором, работают нормально, за исключением того, что у меня возникает та же проблема, если я пытаюсь ввести RoleManager (за исключением слегка отличающегося сообщения об исключении).

1 Ответ

0 голосов
/ 25 сентября 2018

Хотя вы добавили Identity, вы не настроили хранилища данных.Из документов вы должны делать что-то вроде этого:

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

Однако если вы используете ASP.Net Core 2.1, используйте более новую версию:

services.AddDefaultIdentity<IdentityUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>();
...