2017-12-18 266 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

好的讓我檢查一下 –