Identidade principal do ASP.NET: nenhum serviço para o gerenciador de funções
Eu tenho um aplicativo ASP.NET Core que usa Identidade. Funciona, mas quando estou tentando adicionar funções personalizadas ao banco de dados, encontro problemas.
Na inicializaçãoConfigureServices
Adicionei o Identity e o gerenciador de funções como um serviço com escopo definido como este:
services.AddIdentity<Entities.DB.User, IdentityRole<int>>()
.AddEntityFrameworkStores<MyDBContext, int>();
services.AddScoped<RoleManager<IdentityRole>>();
e na inicializaçãoConfigure
Injeto o RoleManager e o passo para a minha classe personalizadaRolesData
:
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory,
RoleManager<IdentityRole> roleManager
)
{
app.UseIdentity();
RolesData.SeedRoles(roleManager).Wait();
app.UseMvc();
Isto é oRolesData
classe:
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");
}
}
}
}
}
O aplicativo é compilado sem erros, mas ao tentar acessá-lo, recebo o seguinte erro:
Não foi possível resolver o serviço para o tipo 'Microsoft.AspNetCore.Identity.IRoleStore`1 [Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole]' ao tentar ativar 'Microsoft.AspNetCore.Identity.RoleManager
O que estou fazendo errado? Meu intestino diz que há algo errado com a forma como adiciono o RoleManager como um serviço.
PS: Usei "Sem autenticação" ao criar o projeto para aprender Identidade do zero.