gpt4 book ai didi

c# - ASP.NET Core 中应用程序启动逻辑的放置位置

转载 作者:行者123 更新时间:2023-12-03 18:45:28 25 4
gpt4 key购买 nike

我想使用 ASP.NET Core 2.1 创建一个 Web 服务,它检查应用程序启动是否与数据库的连接有效,然后在数据库中准备一些数据。

检查循环运行,直到连接成功或用户按下 Ctrl + C ( IApplicationLifetime )。重要的是在初始化数据库之前不处理任何 HTTP 调用。我的问题是:把这段代码放在哪里?

我需要一个完全初始化的依赖注入(inject)系统,所以我能想到的最早是在我的 Startup.Configure 末尾。方法,但 IApplicationLifetime 上的取消标记似乎在那里不起作用(正确地因为 asp 没有完全启动)

有没有官方的地方可以放这个启动逻辑?

最佳答案

您可以从 IWebHost 构建扩展方法这将允许您在 Startup.cs 之前运行代码.此外,您可以使用 ServiceScopeFactory初始化您拥有的任何服务(例如 DbContext )。

public static IWebHost CheckDatabase(this IWebHost webHost)
{
var serviceScopeFactory = (IServiceScopeFactory)webHost.Services.GetService(typeof(IServiceScopeFactory));

using (var scope = serviceScopeFactory.CreateScope())
{
var services = scope.ServiceProvider;
var dbContext = services.GetRequiredService<YourDbContext>();

while(true)
{
if(dbContext.Database.Exists())
{
break;
}
}
}

return webHost;
}

然后您可以使用该方法。
public static void Main(string[] args)
{
BuildWebHost(args)
.CheckDatabase()
.Run();
}

关于c# - ASP.NET Core 中应用程序启动逻辑的放置位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52786605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com