除了內存配置和命令行配置方式外,還有環境變量配置和文件提供程序配置方式。本節將詳解這2種方式。
Table of Contents
環境變量配置方式
適用場景
- Docker中
- Kubernetes中
- 需要設置ASP.NET Core的一些內置特殊配置時
特性
- 對於配置的分層鍵,支持用雙下劃線“__”代替“:”
- 支持根據前綴加載
引用包
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.Abstractions
- Microsft.Extensions.Configuration.EnvironmentVariables
調試方式
我們可通過右鍵項目屬性窗口,選擇調試選項卡,在環境變量部分填寫我們的測試數據
我們同樣也可以通過lanchSettings.json文件來配置
{
"profiles": {
"07_Configuration_Env": {
"commandName": "Project",
"environmentVariables": {
"env1": "env1",
"key2": "value2",
"env1:key3": "value3",
"env1__key4": "value4",
"env1_": "env1_",
"key1": "value1"
}
}
}
}
可通過
configurationBuilder.AddEnvironmentVariables();
來開啓環境變量配置方式,測試代碼如下
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddEnvironmentVariables();
IConfigurationRoot configurationRoot = configurationBuilder.Build();
Console.WriteLine($"key1:{configurationRoot["key1"]}");
Console.WriteLine($"key2:{configurationRoot["key2"]}");
IConfigurationSection section1 = configurationRoot.GetSection("env1");
Console.WriteLine($"key3:{section1["key3"]}");
Console.WriteLine($"key4:{section1["key4"]}");
前綴過濾
環境變量配置方式提供了一種前綴過濾的方式,來允許我們只註冊特定前綴的環境變量,而無需每次都全部註冊,這種方式下,獲取值時,其鍵值是以定義鍵去掉前綴之後的剩餘串作爲鍵值的。
這裏需要好好理解一下,我已經列出了全部可能得情況可以幫助你理解。
configurationBuilder.AddEnvironmentVariables("env1");
IConfigurationRoot configurationRoot = configurationBuilder.Build();
Console.WriteLine($"env1:{configurationRoot[""]}");
Console.WriteLine($"env1_:{configurationRoot["_"]}");
Console.WriteLine($"env1:key3:{configurationRoot[":key3"]}");
Console.WriteLine($"env1__key4:{configurationRoot["__key4"]}");//不能獲取,猜測__是環境變量獨有的識別爲section的方式,因此必須通過section獲取
IConfigurationSection configurationSection = configurationRoot.GetSection("");
Console.WriteLine($"key3:{configurationSection["key3"]}");
Console.WriteLine($"key4:{configurationSection["key4"]}");
文件提供程序配置:自由選擇配置的格式
種類
- Microsoft.Extensions.Configuration.Ini
- Microsoft.Extensions.Configuration.Json
- Microsoft.Extensions.Configuration.NewtonsoftJson
- Microsoft.Extensions.Configuration.Xml
- Microsoft.Extensions.Configuration.UserSecrets
特性
- 可指定文件可選、必選
- 可指定是否監視文件的變更
代碼示例
這裏,我們以json和ini文件爲例,先準備2個文件
{
"key1": "value1",
"key2": 0,
"Section1": {
"key3": "value3",
"key4": 10,
"key5": "ture"
}
}
key6=value6 in ini
可通過
configurationBuilder.AddJsonFile("settings.json",optional:false,reloadOnChange:true);
configurationBuilder.AddIniFile("settings.ini");
//...
開啓文件提供程序配置方式,測試代碼如下
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("settings.json");
configurationBuilder.AddIniFile("settings.ini");
IConfigurationRoot configurationRoot = configurationBuilder.Build();
Console.WriteLine($"key1:{configurationRoot["key1"]}");
Console.WriteLine($"key2:{configurationRoot["key2"]}");
Console.WriteLine($"key3:{configurationRoot["Section1:key3"]}");//也可獲取
IConfigurationSection configurationSection = configurationRoot.GetSection("Section1");
Console.WriteLine($"key3:{configurationSection["key3"]}");
Console.WriteLine($"key4:{configurationSection["key4"]}");
Console.WriteLine($"key5:{configurationSection["key5"]}");
//ini
Console.WriteLine($"key6:{configurationRoot["key6"]}");
文件可選
可用optional指定文件是否可選,默認是false,測試,若不存在文件,則會拋異常。
configurationBuilder.AddJsonFile("settings.json",optional:false);
文件變更監視
reloadOnChange可指定是否監視文件變更,默認爲true
configurationBuilder.AddJsonFile("settings.json",optional:false,reloadOnChange:true);
這裏需要注意一下,如果多個文件中存在相同鍵,那麼後加載的配置會覆蓋先加載的配置。
本節到這裏就要結束了,下節講解配置變更監聽。
源碼可訪問
https://github.com/IronMarmot/Samples/tree/master/CoreSamples
更多課程詳細內容,可識別下方二維碼購買。
【掃描二維碼購買課程,可後臺留言獲得10元紅包返現。】
部分內容來源於網絡,侵刪。
更多精彩內容,請微信搜索攻城獅客棧 或掃描下方二維碼
------------------------------------------------------------------------------
公衆號:攻城獅客棧
CSDN:畫雞蛋的不止達芬奇
讓我們一起變的更優秀。