У меня небольшой проект. NET Core 2.0, и, как Microsoft объявила, что больше не будет поддерживать. NET Core 2.0 Я попытался обновить проект до последней версии - 3.1. Но я с трудом настраивал внедрение зависимостей и мне нужна помощь.
Чтобы заполнить базу данных, мне нужно получить необходимые сервисы, такие как Db Context и пользовательскую конфигурацию, и передать это классу DbInitialize, как показано ниже. Я делал это в Program.cs до конфигурации Startup.cs.
public class Program {
public static void Main(string[] args)
{
var host = BuildWebHost(args);
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<GameStoreContext>();
var configuration = services.GetRequiredService<IConfiguration>();
var userManager = services.GetRequiredService<UserManager<IdentityUser>>();
var roleManager = services.GetRequiredService<RoleManager<IdentityRole>>();
DbInitializer.Initialize(context, configuration, userManager,roleManager).GetAwaiter().GetResult();
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred while seeding the database.");
}
}
host.Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseContentRoot(Directory.GetCurrentDirectory())
.Build();
}
Но в. NET версии Core 3.1 версии BuildWebHost больше нельзя создавать, поэтому я не смог получить такие службы, как этот.
Новая версия Program.cs in. NET Core 3.1 выглядит следующим образом
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Есть ли способ, с помощью которого я могу достичь того же результата в новой платформе?
OBS: я читал в некоторых публикациях людей, которые советуют использовать IConfiguration, но я не смог найти ни одного примера.