我有一个使用HostingEnivronment.RegisterObject的遗留应用程序。
我的任务是将其转换为asp.net core 2.0。但是我无法找到一种方法来实现它或在asp.net core 2.0中找到替代方案。
命名空间Microsoft.AspNetCore.Hosting.Internal不包含registerobject方法,也没有IRegisteredObject接口。我对如何实现这一点感到茫然。
在asp.net核心中实现类似目标的方法是使用IApplicationLifetime接口。它有两个属性两个CancellationToken
s,
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();
您还可以将这些取消令牌传递给期望取消令牌且不应被关闭意外中断的操作。