2017-12-18 267 views
3

我有一个使用HostingEnivronment.RegisterObject的遗留应用程序。asp.net core 2.0中System.Web.Hosting.HostingEnvironment.RegisterObject的替代方案

我一直负责将此转换为asp.net核心2.0。但是我无法找到一种方法来实现这个或在asp.net核心2.0中找到替代方法。

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

回答

1

在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(); 

您也可以通过这些取消标记到希望取消标记,并且不应该被关闭意外中断操作。

+0

好的让我检查一下 –