Служба для типа «Microsoft.AspNetCore.Identity.UserManager`1 [Microsoft.AspNetCore.Identity.IdentityUser] не зарегистрирована. - PullRequest
0 голосов
/ 29 сентября 2018

Какова возможная причина этой ошибки:

InvalidOperationException: Нет службы для типа 'Microsoft.AspNetCore.Identity.UserManager [Microsoft.AspNetCore.Identity.IdentityUser]'.

Моя целевая платформа: netcoreapp2.1.

Это мой класс хранилища пользователей:

public class MyUserStore : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

И мой класс роли пользователя:

public class MyUserRole : IdentityRole
{
    public string Description { get; set; }
}

Мой DbContext:

public class ApplicationDbContext : IdentityDbContext<MyUserStore,MyUserRole,string>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> 
      options): base(options) { }
}

Мой ConfigureServices метод в Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

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

    services.AddIdentity<MyUserStore, MyUserRole>(cfg => {
        cfg.User.RequireUniqueEmail = true;
    }).AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddTransient<Seeder>();
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

Я хочу понять, почему это происходит и какова лучшая практика.

Ответы [ 3 ]

0 голосов
/ 09 июля 2019

Была такая же проблема с ядром 2. Еще одна область, где вам нужно проверить это файл _ManageNav.cshtml.Попробуйте обновить строку

@inject SignInManager<IdentityUser> SignInManager

с

@inject SignInManager<YOURCUSTOMMODEL> SignInManager.`
0 голосов
/ 11 августа 2019

Это решение, в _LoginPartial.cshtml, замените

@using Microsoft.AspNetCore.Identity
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

на

@using Microsoft.AspNetCore.Identity
@inject SignInManager<MyUserStore> SignInManager
@inject UserManager<MyUserStore> UserManager

Обратите внимание на разницу, IdentityUser vs MyUserStore

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

При регистрации собственного MyUserStore (плохое имя, должно быть MyUser) для удостоверения AspNetCore, тип UserManager <> будет зарегистрирован в ServiceCollection как UserManager<MyUserStore>.

Всякий раз, когда выЧтобы разрешить UserManager<>, укажите пользовательскую модель идентификации, зарегистрированную в вашем запуске, в качестве параметра типа. Что будет UserManager<MyUserStore> в вашем конкретном случае.

При вызове GetRequiredService<UserManager<IdentityUser>>() для получающегося в результатепоставщик услуг, GetRequiredService<UserManager<IdentityUser>>() сгенерирует вышеприведенное исключение.

Это обычно происходит при просмотре бритвы.Например,

@inject Microsoft.AspNetCore.Identity.UserManager<Microsoft.AspNetCore.Identity.IdentityUser> userManager

Или аналогично, когда вы вызываете его сами в других классах, как это может быть в вашей службе Seeder.Или другие части кода.Стек вызовов вашего исключения должен дать вам подсказку о том, где это происходит.

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