asp.net core 2.0 中 System.Web.Hosting.HostingEnvironment.RegisterObject 的替代方案

Suj*_*ier 5 c# asp.net asp.net-mvc asp.net-core-2.0

我有一个使用 HostingEnivronment.RegisterObject 的旧应用程序。

我的任务是将其转换为 asp.net core 2.0。但是我无法找到一种方法来实现这一点,也无法在 asp.net core 2.0 中找到替代方案。

命名空间Microsoft.AspNetCore.Hosting.Internal不包含 registerobject 方法,也不具有 IRegisteredObject 接口。我不知道如何实现这一点。

Evk*_*Evk 3

在asp.net core中实现类似目标的方法是使用IApplicationLifetime接口。它有两个属性two CancellationTokens,

ApplicationStopping:

主机正在执行正常关闭。请求可能仍在处理中。关闭会阻塞,直到该事件完成。

ApplicationStopped

主机正在完成正常关闭。所有请求都应得到完全处理。关闭会阻塞,直到该事件完成。

该接口默认注册在容器中,因此您可以将其注入到任何需要的地方。您以前拨打过的电话现在RegisterObject改为拨打

// or ApplicationStopped
var token = lifeTime.ApplicationStopping.Register(OnApplicationStopping);

private void OnApplicationStopping() {
     // will be executed on host shutting down
}
Run Code Online (Sandbox Code Playgroud)

并且您的OnApplicationStopping回调将在主机关闭时由运行时调用。在您之前调用的地方UnregisterObject,您只需处理从以下位置返回的令牌CancellationToken.Register

token.Dispose();
Run Code Online (Sandbox Code Playgroud)

您还可以将这些取消令牌传递给需要取消令牌且不应因关闭而意外中断的操作。