'An error occurred while accessing the Microsoft.Extensions.Hosting services. After Adding ASP.NET identity

I have DataContext and StartUp class in different projects and to add a new migration in Data project I used the below command:

dotnet ef migrations add IdentityAdded -s ..\API\API.csproj

And here is project structure:

enter image description here

I just added ASP.Net Core Identity to the project based on .Net 5 and configured it as below:

 public class DataContext : IdentityDbContext<AppUser, AppRole, int, 
    IdentityUserClaim<int>, AppUserRole, IdentityUserLogin<int>,
    IdentityRoleClaim<int>, IdentityUserToken<int>>
    {
        public DataContext(DbContextOptions<DataContext> options) : base(options)
        {
            ChangeTracker.LazyLoadingEnabled = false;
        }

    ... DbSets
    ... protected override void OnModelCreating(ModelBuilder modelBuilder)
        { ... }
   }

IdentityServiceExtension.cs:

public static class IdentityServiceExtension
{
    public static IServiceCollection AddIdentityServices(this IServiceCollection services, IConfiguration configuration)
    {

        services.AddIdentityCore<AppUser>(opt =>
        {
            opt.Password.RequireNonAlphanumeric = false;
        })
        .AddRoles<AppRole>()
        .AddRoleManager<RoleManager<AppRole>>()
        .AddSignInManager<SignInManager<AppUser>>()
        .AddRoleValidator<RoleValidator<AppUser>>()
        .AddEntityFrameworkStores<DataContext>();
    }
}

I just inherited some classes such as AppUser, AppRole and AppUserRole from Identity Classes like this:

public class AppRole : IdentityRole<int>
{
    public ICollection<AppUserRole> TheUserRolesList { get; set; }
}

After running the migration I get the following error:

An error occurred while accessing the Microsoft.Extensions.Hosting services. Continuing without the application service provider. Error: Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: Microsoft.AspNetCore.Identity.RoleManager1[Core.Models.Entities.User.AppRole] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.RoleManager1[Core.Models.Entities.User.AppRole]': Implementation type 'Microsoft.AspNetCore.Identity.RoleValidator1[Core.Models.Entities.User.AppUser]' can't be converted to service type 'Microsoft.AspNetCore.Identity.IRoleValidator1[Core.Models.Entities.User.AppRole]')

What's wrong with this implementation?



Solution 1:[1]

You didn't register properly, instead of:

.AddRoleValidator<RoleValidator<AppUser>>()

add:

.AddRoleValidator<RoleValidator<AppRole>>()

Your error points out that it can't instantiate Microsoft.AspNetCore.Identity.RoleValidator with the Core.Models.Entities.User.AppUser, instead it requires Core.Models.Entities.User.AppRole.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1