检查启动条件

Check conditions on startup

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

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

Startup class 负责设置您的服务器,使其成为为您的应用程序设置一次性初始化内容的理想选择。

你通常在Startup中有两个主要方法:ConfigureServicesConfigure。前者 运行 很早就负责设置应用程序服务、依赖项和配置。所以你不能用它来实际执行真正的工作,特别是因为依赖注入容器还没有准备好。

然而,Configure 方法不同:虽然它的主要目的是设置应用程序中间件管道,稍后将服务于请求的组件,但您可以在这里充分使用您的依赖项,使其成为可能已经在这里做了更广泛的事情。因此,您可以直接在此处拨打电话。

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

正确的解决方案可能是使用 IApplicationLifetime. This type basically offers you a way to register callbacks that are executed during the application lifecycle. In your case, you would be interested in the ApplicationStarted 事件挂钩应用程序生命周期,该事件 运行 在服务器刚刚完成其设置阶段并准备好处理请求时发生。所以基本上是 运行 一些额外初始化的完美空闲时刻。

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

public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime)
{
    // other…

    // register lifetime event
    applicationLifetime.ApplicationStarted.Register(InitializeApplication);
}

public void InitializeApplication()
{
    // do stuff
}

最后一点:显然,目前有 an open bug 可以防止在 IIS 上托管时触发生命周期事件。在这种情况下,直接在 Configure 中执行代码可能是最好的选择。