我在.NET Core 2.0上有一个小项目。由于Microsoft宣布将不再支持.NET Core 2.0,因此我尝试将该项目更新到最新版本,目前是3.1。但是,我在配置依赖注入时遇到了困难,需要一些帮助。
为了填充数据库,我需要获取所需的服务(如Db Context和用户配置),并将其传递给DbInitialize类,如下所示。我在Startup.cs配置之前在Program.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 不再可以被实例化,因此我无法像这样检索服务。
在 .NET Core 3.1 中,Program.cs 的新版本如下所示:
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,但我找不到任何示例。