我想使用 ASP.NET Core 2.1 创建一个 Web 服务,该服务在应用程序启动时检查与数据库的连接是否正常,然后在数据库中准备一些数据。
检查循环运行,直到连接成功或用户按 Ctrl + C (IApplicationLifetime
)。重要的是,在数据库初始化之前不处理任何 HTTP 调用。我的问题是:这段代码应该放在哪里?
我需要一个依赖注入系统来完全初始化,所以我能想到的最早是在我的末尾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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)