.NET Core - 環境變量配置和文件提供程序配置方式詳解

除了內存配置和命令行配置方式外,還有環境變量配置和文件提供程序配置方式。本節將詳解這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:畫雞蛋的不止達芬奇

 

                                                                 

讓我們一起變的更優秀。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章