Я не могу использовать RoleManager в своем приложении.Я пытаюсь внедрить пользователя с правами администратора в веб-приложение .NET Core и хочу, чтобы у этого пользователя была роль canEdit.То, что я получил в настоящее время, выдает эту ошибку:
System.InvalidOperationException: «Нет службы для типа» Microsoft.AspNetCore.Identity.RoleManager`1 [Microsoft.AspNetCore.Identity.IdentityRole] 'зарегистрирован.'
Я пробовал разные способы сделать это.Я пытался использовать Service Provider для этого, внедрения зависимостей и т. Д., Но все они выдают одну и ту же ошибку.
ServiceProvider в методе Configure Startup.cs:
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
var scopeFactory = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>();
var scope = scopeFactory.CreateScope();
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
DbInitializer dbi = new DbInitializer(roleManager);
dbi.Initialize(context, userManager);
Класс DBInitializer:
Конструктор:
private readonly RoleManager<IdentityRole> rm;
public DbInitializer(RoleManager<IdentityRole> rm)
{
this.rm = rm;
}
Метод CreateAdmin:
private async Task CreateAdmin(UserManager<ApplicationUser> userManager, ApplicationDbContext context)
{
IdentityResult ir;
ir = await rm.CreateAsync(new IdentityRole("canEdit"));
IdentityRole canEdit = new IdentityRole("canEdit");
ApplicationUser admin = new ApplicationUser
{
UserName = "Member1@email.com"
};
if (context.Users.Where(u => u.UserName == admin.UserName).Count() == 0)
{
userManager.CreateAsync(admin, "Password123!").Wait();
userManager.AddToRoleAsync(admin, "canEdit").Wait();
}
}
Метод CreateUsers:
private void CreateUsers(UserManager<ApplicationUser> userManager, ApplicationDbContext context)
{
CreateAdmin(userManager, context).Wait();
ApplicationUser customer1 = new ApplicationUser
{
UserName = "Customer1@email.com"
};
if (context.Users.Where(u => u.UserName == customer1.UserName).Count() > 0)
{
userManager.CreateAsync(customer1, "Password123!").Wait();
}
Это повторяется для customer2, 3, 45. Я могу оптимизировать это, избавившись от необходимости создавать объект, который мне может не понадобиться (в случае, если электронная почта существует), но я пытался быстро подобрать этот метод и метод CreateAdmin, а затем оптимизировать позже.К сожалению, я столкнулся с ошибкой, которую я не смог исправить.
Конечная цель состоит в том, чтобы класс DbInitializer заполнил 5 обычных пользователей и 1 администратора с дополнительными разрешениями / утверждениями.