
因為手邊的 .Net Core API 專案越來越多,蠻常會需要讀 appsetting.json 的 Config,每次都要重找文章有點麻煩,這邊就來筆記一篇。
認識 Appsettings.json
首先簡單介紹一下 appsettings.json 是在幹嘛的:
我們開發的時候,常常會需要先設定好一些服務參數、組態設定之類的設定值,再用這些設定值用來控制我們程式的某些行為。例如:
- 「某功能的上限值是
10
」
- 「某項開關在測試環境是
false
」
- 「某服務信件的發送者要用
noreply9527
」
另外常見的還有連線字串、寫 Log 時的 logging level 等等。
這些設定值會和程式碼拆開,放在設定檔集中管理,再讓程式碼從設定檔讀取相關的設定值來用就好,藉此來把設定值的管理和使用做個關注點分離。
有了設定檔,要調整修改也比較方便:要增加或是修改設定值,都只要先往設定檔衝就行。並且因為兩邊拆開了,我們也就可以簡單地替換這些設定值來應對不同狀況(例如正式環境和測試環境套用兩組不同的設定檔,或是在自己電腦測試的時候快速改個值之類的),彈性可說是 UPUP!
更重要的是,這樣我們就不需要把一大堆東西寫死在程式碼的各個地方,也就不會要改個值還要先搜尋整個專案再一個一個挖出來改了。我按 Shift Ctrl F 已經按到哭
把設定值抽出去丟到設定檔之後,我們就得到了:集中管理設定值、方便修改和替換、減少程式碼中又重複又寫死的臭東西等等好處。
在 .Net Core 的世界裡,這個設定檔就是 appsettings.json。
前面提到的像是日誌等級、功能旗標之類的這些設定值,就會放在 appsettings.json 裡面。
而當我們想要從 appsettings.json 把這些設定值給讀出來的時候,
就可以使用我們的 IOptions 啦!
使用 IOptions 來註冊 & 注入
提醒:這篇的示範會用到一些些 .Net 依賴注入(DI)相關的操作。沒接觸過的朋友可以考慮先閱讀菜雞新訓記:依賴注入
假設我們有個專案,叫做大漢防禦管理系統。專案內的 appsettings.json 有以下內容:
{
"StrongholdInfo": {
"Index": 49,
"Name": "劍閣",
"Enabled": true,
"General": [
"姜維",
"廖化",
"張翼",
"董厥"
]
}
}
我們正好在開發一個新功能,需要抓到這段設定值。現在就來示範一下:
……