У меня есть приложение ASP.NET Core, которое использует Identity. Он работает, но когда я пытаюсь добавить пользовательские роли в базу данных, я сталкиваюсь с проблемами.Идентификатор ядра ASP.NET: нет службы для диспетчера ролей
В Startup ConfigureServices
я добавил Идентичность и диспетчер ролей как контекстными службы, как это:
services.AddIdentity<Entities.DB.User, IdentityRole<int>>()
.AddEntityFrameworkStores<MyDBContext, int>();
services.AddScoped<RoleManager<IdentityRole>>();
и в запуске 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 с нуля.
Я предлагаю создать другой проект с использованием отдельных учетных записей пользователей, чтобы вы могли сравнить с тем, что настроено для вас, когда вы используете шаблон, который включает в себя идентификатор. –
Новый проект с добавленными «отдельными учетными записями пользователей» не содержит кода, который настраивается роли. –
Нет, это не так, но у него может быть какой-то код, который вызывает зависимые связи, которые вы неправильно подключили. –