检查启动条件



我想在我的 ASP.Net Core 2.0应用程序的启动时测试某些条件。例如,如果我的数据库服务器或其他服务器运行正常。这对于仅在请求后实例化的内容(如我的存储库)特别有用。

目前我必须手动执行此请求,但我希望我的应用程序提前失败。建议在什么时间和什么地方进行这样的测试?

Startup类负责设置服务器,使其成为为应用程序设置一次性初始化内容的完美候选者。

你通常有两种主要方法StartupConfigureServicesConfigure。前者运行得很早,负责设置应用程序服务、依赖项和配置。因此,您不能使用它来实际执行实际工作,特别是因为依赖注入容器尚未准备就绪。

但是,Configure方法有所不同:虽然它的主要目的是设置应用程序中间件管道,即稍后将处理请求的组件,但您可以在此处充分利用依赖项,从而可以在此处执行更广泛的操作。因此您可以直接在此处拨打电话。

重要的是要了解Configure仍然运行得相当早,远远早于您的服务器实际准备好为请求提供服务。因此,如果您的初始化依赖于实际的服务器已经存在,则可能应该进一步延迟执行。

正确的解决方案可能会使用IApplicationLifetime挂钩到应用程序生命周期中。此类型基本上为您提供了一种注册在应用程序生命周期中执行的回调的方法。在您的情况下,您会对服务器刚刚完成其设置阶段并且现在准备好处理请求时运行的ApplicationStarted事件感兴趣。所以基本上是运行一些额外初始化的完美空闲时刻。

为了响应生存期事件,您需要在Configure方法中注册处理程序:

public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime)
{
// other…
// register lifetime event
applicationLifetime.ApplicationStarted.Register(InitializeApplication);
}
public void InitializeApplication()
{
// do stuff
}

最后一点:显然,当前有一个未解决的错误,可以防止在 IIS 上托管时触发生存期事件。在这种情况下,直接在Configure中执行代码可能是最好的选择。

最新更新