Home > Software design >  An error occurred while accessing the Microsoft.Extensions.Hosting services. After Adding ASP.NET id
An error occurred while accessing the Microsoft.Extensions.Hosting services. After Adding ASP.NET id

Time:05-08

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?

CodePudding user response:

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.

  • Related