重新整理 .net core 实践篇—————配置文件之环境配置[九]

Posted 你永远想象不到,一个光鲜亮丽的Application,有多么

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重新整理 .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_会被过滤掉。

下一节 配置系统之强类型配置。

以上只是个人整理,如有错误,望请指点,谢谢。

以上是关于重新整理 .net core 实践篇—————配置文件之环境配置[九]的主要内容,如果未能解决你的问题,请参考以下文章

重新整理 .net core 实践篇—————配置系统之军令状[七](配置文件)

重新整理 .net core 实践篇—————配置文件之环境配置[九]

重新整理 .net core 实践篇—————配置系统之间谍[八](文件监控)

重新整理 .net core 实践篇—————静态中间件[二十一]

重新整理 .net core 实践篇—————中间件[十九]

重新整理 .net core 实践篇—————应用层[三十]