文章目錄
讓 ASP.NET Core MVC 自行停止運作
公司專案有個系統在啟動時執行 init script,接著就等待後台管理者下指令才會有後續動作,但開發階段暫時還不會有後台管理者的角色,因此希望可以透過參數設定來決定是否讓該系統持續提供服務或是執行工作完成後即可自行關閉以節省資源,紀錄一下加深印象
基本環境說明
- macOS Mojave 10.14.4
- Docker Engine - Community 18.09.2
- .NET Core 2.2.101
- ASP.NET Core 2.2.0
- 預設 Web App (Model-View-Controller) 專案範本
如何修改
在
Start.cs
中加入IApplicationLifetime
fieldprivate IApplicationLifetime _applicationLifetime;
在
Start.cs
的Configue
方法中加入IApplicationLifetime applicationLifetime
參數並將參數值設定給先前新增的 fieldpublic void Configure(IApplicationBuilder app, IHostingEnvironment env,IApplicationLifetime applicationLifetime) { _applicationLifetime = applicationLifetime; //以下原設定內容略過.... }
設定將 application 關閉
執行
_applicationLifetime.StopApplication();
在
Start.cs
的Configue
執行我自己在專案上使用啟動參數 (
stop
)來決定是否關閉var stop = Configuration.GetValue<bool>("stop"); if (stop) _applicationLifetime.StopApplication();
使用下列指令即可執行關閉
dotnet {project}.dll stop=true
在 Controller 中執行
加入 field 並在建構子允許 DI
private IApplicationLifetime _applicationLifetime; public HomeController(IApplicationLifetime applicationLifetime) { _applicationLifetime = applicationLifetime; }
Action 執行 shutdown
public void Shutdown() { _applicationLifetime.StopApplication(); }
心得
IApplicationLifetime
有三個 Properties
ApplicationStarted
application 完全啟動後等待正常關閉時觸發 (Startup.Configure()方法結束)
ApplicationStopping
application 執行正常關閉時觸發,會待所有 request 處理完才執行關閉
ApplicationStopping
application 完成正常關閉後觸發
一個方法
- StopApplication()
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。