Dan*_*ter 4 c# startup .net-core asp.net-core
我想用 ASP.NET Core 2.1 创建一个 Web 服务,它检查应用程序启动时与数据库的连接是否正常,然后在数据库中准备一些数据。
检查循环运行,直到连接成功或用户按下 Ctrl + C ( IApplicationLifetime)。在数据库初始化之前不处理任何 HTTP 调用是很重要的。我的问题是:把这段代码放在哪里?
我需要一个完全初始化的依赖注入系统,所以我能想到的最早是在我的Startup.Configure方法结束时,但是取消令牌IApplicationLifetime似乎在那里不起作用(正确的是因为asp没有完全启动)
有没有官方的地方可以放这个启动逻辑?
Tra*_*man 10
您可以构建一个扩展方法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;
}
Run Code Online (Sandbox Code Playgroud)
然后您可以使用该方法。
public static void Main(string[] args)
{
BuildWebHost(args)
.CheckDatabase()
.Run();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3936 次 |
| 最近记录: |