天天看點

Startup在不同環境中的處理

ASP.NET Core引進了在多種環境中對控制應用程式行為的進一步支援,例如開發環境(Development Environment)、預釋出環境(Staging Environment),和生産環境(Production Environment)。環境變量(ASPNETCORE_ENVIRONMENT)被用來訓示程式在哪個環境中運作,允許程式被正确的配置。

一、運作環境

開發環境(Development):當開發程式時使用。

預釋出環境(Staging):按照慣例,Staging環境是預生産環境,用于釋出到産品環境前的最終測試。

産品環境(Production):是正在運作并被終端使用者使用的環境。這個環境應該配置成最大程度的安全、高效和魯棒性。

二、環境變量(ASPNETCORE_ENVIRONMENT)

ASP.NET Core使用一個特殊的環境變量——ASPNETCORE_ENVIRONMEN來描述應用程式目前運作的環境。這個變量可以設定成你任何喜歡的值,但約定俗成使用這三個值:Development、Staging和Production。你将在ASP.NET Core提供的樣例和模版中找到這些值。

在Windows和macOS中,環境變量名是大小寫不敏感的。不管你是把它設定成Development,或者是development,或者是DEVELOPMENT,結果都一樣。然而在預設情況下,Linux是大小寫敏感的。出于最佳實踐的考慮,環境變量、檔案名和設定(Setting)應該假定為大小寫敏感。

三、設定環境變量

關于在不同環境時,如何設定環境變量,可參考微軟的官方文檔:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments#setting-the-environment

在開發時,我們可以在Visual Studio的設定頁中直接修改環境變量(如下圖所示),不需要修改系統中的設定。

Startup在不同環境中的處理

這個屬性頁中的設定會被持久化存儲到launchSettings.json這個檔案中。這個檔案位于項目的Properties檔案夾下面。

Startup在不同環境中的處理

四、根據不同的環境加載不同的Startup類

在上篇中提到程式的主方法中使用到UseStartup<TStartup>()這個方法。這個方法有多個重載,除了可以加載指定的Startup類外,還可以在指定的程式集中根據目前程式運作環境搜尋特定的Startup類。搜尋規則為尋找名字為"Startup{EnvironmentName}"。例如,目前程式在開發環境中運作時,這個方法就會在你指定的程式集中查找名為"StartupDevelopment"的類。

ASP.NET Core還支援這樣的情況:當你在使用UseStartup<TStartup>()指定了一個固定的Startup類後,它還可以根據目前程式運作環境,加載Startup類中以這種格式 "Configure{EnvironmentName}"命名的方法。舉個例子,如果程式目前的執行環境是Staging環境,就會調用在Startup類中的ConfigureStaging方法,而不再調用Configure方法。

五、總結

Startup的使用比較靈活,可以把開發、測試、生産獨立的環境獨立開來,可以在實際中運用起來。

六、參考

https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments