ASP.NET Core Identity: No service for role manager
What am I doing wrong? My gut says there's something wrong with how I add the RoleManager as a service.
The registration part is actually fine, tho' you should remove services.AddScoped<RoleManager<IdentityRole>>()
, as the role manager is already added for you by services.AddIdentity()
.
Your issue is most likely caused by a generic type mismatch: while you call services.AddIdentity()
with IdentityRole<int>
, you try to resolve RoleManager
with IdentityRole
, which is an equivalent of IdentityRole<string>
(string
being the default key type in ASP.NET Core Identity).
Update your Configure
method to take a RoleManager<IdentityRole<int>>
parameter and it should work.
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)
This my solution seed User and Role ASP.NET Core 2.2
Startup.cs
services.AddDefaultIdentity<ApplicationUser>() .AddRoles<IdentityRole<Guid>>() .AddDefaultUI(UIFramework.Bootstrap4) .AddEntityFrameworkStores<ApplicationDbContext>();public void Configure(IApplicationBuilder app, IHostingEnvironment env) ... ... SeedData.Initialize(app.ApplicationServices);)
SeedData.cs
public static void Initialize(IServiceProvider serviceProvider){ using (var scope = serviceProvider.CreateScope()) { var provider = scope.ServiceProvider; var context = provider.GetRequiredService<ApplicationDbContext>(); var userManager = provider.GetRequiredService<UserManager<ApplicationUser>>(); var roleManager = provider.GetRequiredService<RoleManager<IdentityRole<Guid>>>(); // automigration context.Database.Migrate(); InstallUsers(userManager, roleManager); } } private static void InstallUsers(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole<Guid>> roleManager) { const string USERNAME = "admin@mysite.com"; const string PASSWORD = "123456ABCD"; const string ROLENAME = "Admin"; var roleExist = roleManager.RoleExistsAsync(ROLENAME).Result; if (!roleExist) { //create the roles and seed them to the database roleManager.CreateAsync(new IdentityRole<Guid>(ROLENAME)).GetAwaiter().GetResult(); } var user = userManager.FindByNameAsync(USERNAME).Result; if (user == null) { var serviceUser = new ApplicationUser { UserName = USERNAME, Email = USERNAME }; var createPowerUser = userManager.CreateAsync(serviceUser, PASSWORD).Result; if (createPowerUser.Succeeded) { var confirmationToken = userManager.GenerateEmailConfirmationTokenAsync(serviceUser).Result; var result = userManager.ConfirmEmailAsync(serviceUser, confirmationToken).Result; //here we tie the new user to the role userManager.AddToRoleAsync(serviceUser, ROLENAME).GetAwaiter().GetResult(); } } }