Der Dienst für den Typ „Microsoft.AspNetCore.Identity.UserManager“ kann nicht aufgelöst werden, während versucht wird, „AuthController“ zu aktivieren.

Der Dienst für den Typ „Microsoft.AspNetCore.Identity.UserManager“ kann nicht aufgelöst werden, während versucht wird, „AuthController“ zu aktivieren.

Sie müssen dasselbe Benutzerdatenmodell in SignInManager, UserManager und services.AddIdentity verwenden. Das gleiche Prinzip gilt, wenn Sie Ihre eigene benutzerdefinierte Anwendungsrollenmodellklasse verwenden.

Ändern Sie also

services.AddIdentity<IdentityUser, IdentityRole>(options =>
    {
        options.User.RequireUniqueEmail = false;
    })
    .AddEntityFrameworkStores<Providers.Database.EFProvider.DataContext>()
    .AddDefaultTokenProviders();

zu

services.AddIdentity<Automobile.Models.Account, IdentityRole>(options =>
    {
        options.User.RequireUniqueEmail = false;
    })
    .AddEntityFrameworkStores<Providers.Database.EFProvider.DataContext>()
    .AddDefaultTokenProviders();

Nur um die Antwort klarzustellen:

Wenn Sie die Klasse ApplicationUser verwenden in startup.cs:services.AddIdentity<ApplicationUser, IdentityRole>()

dann müssen Sie beim Einfügen dieselbe Klasse in Ihrem Controller verwenden:

public AccountController(UserManager<ApplicationUser> userManager)

Wenn Sie eine andere Klasse verwenden, wie zum Beispiel:

public AccountController(UserManager<IdentityUser> userManager)

dann erhalten Sie diesen Fehler:

weil Sie ApplicationUser verwendet haben beim Start, nicht IdentityUser daher ist dieser Typ nicht mit dem Einspritzsystem registriert.


Dies hat etwas nichts mit dem ursprünglichen Beitrag zu tun, aber da Google Sie hierher bringt ... wenn Sie diesen Fehler erhalten und Folgendes verwenden:

services.AddIdentityCore<YourAppUser>()

Dann müssen Sie das Zeug, das AddIdentity ist, manuell registrieren tut, die hier zu finden ist:https://github.com/aspnet/Identity/blob/feedcb5c53444f716ef5121d3add56e11c7b71e5/src/Identity/IdentityServiceCollectionExtensions.cs#L79

        services.AddHttpContextAccessor();
        // Identity services
        services.TryAddScoped<IUserValidator<TUser>, UserValidator<TUser>>();
        services.TryAddScoped<IPasswordValidator<TUser>, PasswordValidator<TUser>>();
        services.TryAddScoped<IPasswordHasher<TUser>, PasswordHasher<TUser>>();
        services.TryAddScoped<ILookupNormalizer, UpperInvariantLookupNormalizer>();
        services.TryAddScoped<IRoleValidator<TRole>, RoleValidator<TRole>>();
        // No interface for the error describer so we can add errors without rev'ing the interface
        services.TryAddScoped<IdentityErrorDescriber>();
        services.TryAddScoped<ISecurityStampValidator, SecurityStampValidator<TUser>>();
        services.TryAddScoped<ITwoFactorSecurityStampValidator, TwoFactorSecurityStampValidator<TUser>>();
        services.TryAddScoped<IUserClaimsPrincipalFactory<TUser>, UserClaimsPrincipalFactory<TUser, TRole>>();
        services.TryAddScoped<UserManager<TUser>>();
        services.TryAddScoped<SignInManager<TUser>>();
        services.TryAddScoped<RoleManager<TRole>>();

Sie müssen TUser ersetzen und TRole mit Ihren Implementierungen davon oder dem Standard IdentityUser , IdentityRole