У меня есть приложение ASP.NET Core, которое использует Identity. Он работает, но когда я пытаюсь добавить пользовательские роли в базу данных, у меня возникают проблемы.
В Startup ConfigureServices
Я добавил Identity и диспетчер ролей в качестве службы с ограниченным доступом, например:
services.AddIdentity<Entities.DB.User, IdentityRole<int>>()
.AddEntityFrameworkStores<MyDBContext, int>();
services.AddScoped<RoleManager<IdentityRole>>();
и в Startup Configure
Я вставляю RoleManager и передаю его в свой пользовательский класс RolesData
:
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory,
RoleManager<IdentityRole> roleManager
)
{
app.UseIdentity();
RolesData.SeedRoles(roleManager).Wait();
app.UseMvc();
Это класс RolesData
:
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");
}
}
}
}
}
Приложение работает без ошибок, но при попытке доступа к нему я получаю следующую ошибку:
Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IRoleStore`1[Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole]' while attempting to activate 'Microsoft.AspNetCore.Identity.RoleManager
Что я делаю неправильно? Мой кишок говорит, что что-то не так с тем, как я добавляю RoleManager в качестве службы.
PS: Я использовал "Нет аутентификации" при создании проекта, чтобы узнать Identity с нуля.