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

我有一个遗留应用程序,其中使用HostingEnivronment.RegisterObject。

我的任务是将其转换为asp.net core 2.0。 但是我无法找到实现这个的方法,或者在asp.net core 2.0中找到替代方法。

命名空间Microsoft.AspNetCore.Hosting.Internal不包含registerobject方法,也没有IRegisteredObject接口。 我对如何实现这一点感到茫然。

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

ApplicationStopping

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

ApplicationStopped

主机正在完成正常关机。 所有请求都应该完整处理。 关闭阻止,直到此事件完成。

默认情况下,此接口在容器中注册,因此您可以将其注入到您需要的任何位置。 您之前调用RegisterObject ,而是调用

 // or ApplicationStopped var token = lifeTime.ApplicationStopping.Register(OnApplicationStopping); private void OnApplicationStopping() { // will be executed on host shutting down } 

并且主机关闭时运行时将调用OnApplicationStopping回调。 您之前将调用UnregisterObject ,您只需处置从CancellationToken.Register返回的令牌:

 token.Dispose(); 

您还可以将这些取消令牌传递给期望取消令牌且不应被关闭意外中断的操作。