重新整理 .net core 實踐篇—————配置系統之環境配置[九]


前言

在當今在互聯網微服務比較適用的情況下,docker 可以說一個利器。每次我們打包docker的時候都是適用docker 的配置文件,那么配置文件里面會設置環境變量,這個時候需要我們的應用能夠識別到這些環境變量並作出相應的選擇。

適用場景:

docker 運行環境

k8s 運行環境

因為他們都是隔離機制的,故而環境變量能夠發揮其非常好的作用。

正文

引入:microsoft.extensions.configuration.environmentVariables 這個包。

設置環境變量:

對應的lauchSettings.json 如下:

{
  "profiles": {
    "ConfigureDemo": {
      "commandName": "Project",
      "commandLineArgs": "-k1=value4",
      "environmentVariables": {
        "section1__key2": "value2",
        "key1": "value1"
      }
    }
  }
}

這個section1__key2,section1和key2 之間是兩個_,作為他們的分層符號。

代碼:

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables();

var configurationRoot = builder.Build();
Console.WriteLine($"key1:{configurationRoot["key1"]}");

var section = configurationRoot.GetSection("section1");
Console.WriteLine($"key2:{section["key2"]}");

運行結果:

無限套娃模式也是適用的,前面原理已經講過了,這里只演示代碼。

{
  "profiles": {
    "ConfigureDemo": {
      "commandName": "Project",
      "commandLineArgs": "-k1=value4",
      "environmentVariables": {
        "section1__key2": "value2",
        "key1": "value1",
        "section2__section3__key3": "value3"
      }
    }
  }
}

代碼:

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables();

var configurationRoot = builder.Build();
Console.WriteLine($"key1:{configurationRoot["key1"]}");

var section = configurationRoot.GetSection("section1");
Console.WriteLine($"key2:{section["key2"]}");

var section2 = configurationRoot.GetSection("section2");
var section3 = section2.GetSection("section3");
Console.WriteLine($"key3:{section3["key3"]}");

除了上面的__可以作為section的分層符之外,:也是可以的。

下面演示前綴過濾:

{
  "profiles": {
    "ConfigureDemo": {
      "commandName": "Project",
      "commandLineArgs": "-k1=value4",
      "environmentVariables": {
        "key1": "value1",
        "k8s_key2": "value2" 
      }
    }
  }
}

代碼:

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables("k8s_");

var configurationRoot = builder.Build();

Console.WriteLine($"key1:{configurationRoot["key1"]}");
Console.WriteLine($"key2:{configurationRoot["key2"]}");

結果:

就是說不是k8s_會被過濾掉。

下一節 配置系統之強類型配置。

以上只是個人整理,如有錯誤,望請指點,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM