Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET Core Identity: No service for role manager

Tags:

I have an ASP.NET Core app that uses Identity. It works, but when I am trying to add custom roles to the database I run into problems.

In Startup ConfigureServices I have added Identity and the role manager as a scoped service like this:

services.AddIdentity<Entities.DB.User, IdentityRole<int>>()                 .AddEntityFrameworkStores<MyDBContext, int>();  services.AddScoped<RoleManager<IdentityRole>>(); 

and in Startup Configure I inject RoleManager and pass it to my custom class RolesData:

    public void Configure(         IApplicationBuilder app,          IHostingEnvironment env,          ILoggerFactory loggerFactory,         RoleManager<IdentityRole> roleManager     )     {      app.UseIdentity();     RolesData.SeedRoles(roleManager).Wait();     app.UseMvc(); 

This is the RolesData class:

public static class RolesData {      private static readonly string[] roles = new[] {         "role1",         "role2",         "role3"     };      public static async Task SeedRoles(RoleManager<IdentityRole> roleManager)     {          foreach (var role in roles)         {              if (!await roleManager.RoleExistsAsync(role))             {                 var create = await roleManager.CreateAsync(new IdentityRole(role));                  if (!create.Succeeded)                 {                      throw new Exception("Failed to create role");                  }             }          }      }  } 

The app builds without errors, but when trying to access it I get the following error:

Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IRoleStore`1[Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole]' while attempting to activate 'Microsoft.AspNetCore.Identity.RoleManager

What am I doing wrong? My gut says there's something wrong with how I add the RoleManager as a service.

PS: I have used "No authentication" when creating the project to learn Identity from scratch.

like image 274
Glenn Utter Avatar asked Jan 02 '17 11:01

Glenn Utter


1 Answers

I was having this issue

No service for type 'Microsoft.AspNetCore.Identity.RoleManager`

And this page was the first result on Google. It did not answer my question, so I thought I would put my solution here, for anyone else that may be having this problem.

ASP.NET Core 2.2

The missing line for me was .AddRoles() in the Startup.cs file.

        services.AddDefaultIdentity<IdentityUser>()             .AddRoles<IdentityRole>()             .AddDefaultUI(UIFramework.Bootstrap4)             .AddEntityFrameworkStores<ApplicationDbContext>(); 

Hope this helps someone

Source: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/roles?view=aspnetcore-2.2 (at the bottom)

like image 115
Dave ت Maher Avatar answered Oct 21 '22 12:10

Dave ت Maher