Saltar al contenido

No se puede resolver el servicio para el tipo ‘Microsoft.AspNetCore.Identity.UserManager’ al intentar activar ‘AuthController’

Este dilema se puede resolver de diversas formas, por lo tanto te enseñamos la solución más completa para nosotros.

Solución:

Debe usar el mismo modelo de datos de usuario en SignInManager, UserManager y services.AddIdentity. El mismo director es true si está utilizando su propia clase de modelo de rol de aplicación personalizada.

Entonces, cambia

services.AddIdentity(options =>
    
        options.User.RequireUniqueEmail = false;
    )
    .AddEntityFrameworkStores()
    .AddDefaultTokenProviders();

a

services.AddIdentity(options =>
    
        options.User.RequireUniqueEmail = false;
    )
    .AddEntityFrameworkStores()
    .AddDefaultTokenProviders();

Para que quede claro la respuesta:

Si usas la clase ApplicationUser en inicio.cs: services.AddIdentity()

entonces debe usar la misma clase en su controlador al inyectarlo:

public AccountController(UserManager userManager)

Si usa alguna otra clase como:

public AccountController(UserManager userManager)

entonces obtendrá este error:

InvalidOperationException: no se puede servicio de resolución para el tipo ‘Microsoft.AspNetCore.Identity.UserManager`1[IdentityUser]’

porque usaste ApplicationUser en el arranque, no IdentityUser por lo que este tipo no está registrado con el sistema de inyección.

Esto no tiene nada que ver con la publicación original, pero dado que Google te trae aquí… si recibes este error y estás usando:

services.AddIdentityCore()

Luego deberá registrar manualmente las cosas que AddIdentity hace, que se puede encontrar aquí: https://github.com/aspnet/Identity/blob/feedcb5c53444f716ef5121d3add56e11c7b71e5/src/Identity/IdentityServiceCollectionExtensions.cs#L79

        services.AddHttpContextAccessor();
        // Identity services
        services.TryAddScoped, UserValidator>();
        services.TryAddScoped, PasswordValidator>();
        services.TryAddScoped, PasswordHasher>();
        services.TryAddScoped();
        services.TryAddScoped, RoleValidator>();
        // No interface for the error describer so we can add errors without rev'ing the interface
        services.TryAddScoped();
        services.TryAddScoped>();
        services.TryAddScoped>();
        services.TryAddScoped, UserClaimsPrincipalFactory>();
        services.TryAddScoped>();
        services.TryAddScoped>();
        services.TryAddScoped>();

Tendrás que reemplazar TUser y TRole con sus implementaciones de esos, o el valor predeterminado IdentityUser, IdentityRole

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *