В данный момент я пытаюсь настроить роли с помощью RoleManager<Identity>
, встроенного в .NET Core 2.0, mvc-framework.
Однако я получаю следующую ошибку:
System.ObjectDisposedException
HResult=0x80131622
Message=Cannot access a disposed object. A common cause of this error is
disposing a context that was resolved from dependency injection and then
later trying to use the same context instance elsewhere in your application.
This may occur if you are calling Dispose() on the context, or wrapping the
context in a using statement. If you are using dependency injection, you
should let the dependency injection container take care of disposing context
instances. The error occured in line 20 of UserRoleSeed-class.
Это из-за асинхронного символа метода Seed()
?
Моя программа.cs:
public class Program
{
public static void Main(string[] args)
{
var host = BuildWebHost(args);
using (var scope = host.Services.CreateScope())
{
var serviceProvider = scope.ServiceProvider;
try
{
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
new UserRoleSeed(roleManager).Seed();
}
catch
{
throw new Exception();
}
}
host.Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
Мой UserRoleSeed.cs:
public class UserRoleSeed
{
private readonly RoleManager<IdentityRole> _roleManager;
public UserRoleSeed(RoleManager<IdentityRole> roleManager)
{
_roleManager = roleManager;
}
public async void Seed()
{
if ((await _roleManager.FindByNameAsync("Berijder")) == null)
{
await _roleManager.CreateAsync(new IdentityRole {Name =
"Berijder"});
}
}
}
Это должно создать новую запись в таблице dbo.AspNetRoles моего Context imo, но это не так. Проблема может быть чем-то небольшим, я впервые пытаюсь использовать роли в Mvc-фреймворке.
Сначала я попытался использовать файл Startup.cs, вызвав метод Seed()
в методе Configure () этого файла, который не сработал (возможно, потому что это CORE 2.0, а не 1.0).