我想测试 ASP.Net Core 2.0 应用程序启动时的某些条件。例如,如果我的数据库服务器或其他服务器运行正常。这对于仅在请求后才会实例化的事物(例如我的存储库)特别有用。
目前我必须手动执行此请求,但我希望我的应用程序尽早失败。建议在什么时间、什么地点进行这样的测试?
The Startup
类负责设置您的服务器,使其成为为您的应用程序设置一次性初始化内容的完美候选者。
通常有两种主要方法Startup
: ConfigureServices
and Configure
。前者运行得很早,负责设置应用程序服务、依赖项和配置。因此,您无法使用它来实际执行实际工作,特别是因为依赖项注入容器尚未准备好。
但是,那Configure
方法有所不同:虽然其主要目的是设置应用程序中间件管道(稍后将服务请求的组件),但您可以在此处充分使用依赖项,从而可以在此处执行更广泛的操作。那么你could直接在此处拨打电话。
重要的是要理解这一点Configure
仍然运行得相当早,远早于您的服务器真正准备好服务请求。因此,如果您的初始化取决于已经存在的实际服务器,您可能应该进一步延迟执行。
正确的解决方案可能会使用以下方式融入应用程序生命周期IApplicationLifetime。这种类型基本上为您提供了一种注册在应用程序生命周期期间执行的回调的方法。就您而言,您会对ApplicationStarted当服务器刚刚完成其设置阶段并且现在准备好服务请求时运行的事件。所以基本上是运行一些额外初始化的完美空闲时刻。
为了响应生命周期事件,您需要在Configure
method:
public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime)
{
// other…
// register lifetime event
applicationLifetime.ApplicationStarted.Register(InitializeApplication);
}
public void InitializeApplication()
{
// do stuff
}
最后一点:显然,目前有一个开放的错误这可以防止在 IIS 上托管时触发生命周期事件。在这种情况下,直接执行您的代码Configure
可能是最好的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)