本文共 2359 字,大约阅读时间需要 7 分钟。
环境变量的配置提供程序主要适应场景:
1、在 Docker 中运行时
2、在 Kubernetes 中运行时
3、需要设置 ASP.NET Core 的一些内置特殊配置时
环境变量和命令行这两个提供程序在早期是没有容器化的,当时一个操作系统会跑多个应用程序,应用程序注入配置的方式一般都是通过文件或者是命令行的方式来注入的,环境变量当时用的比较少
现在在容器化的环境下,有了 Docker 的隔离能力,就意味着每一个应用程序都相当于跑在一个小型的操作系统下面一样,所以说这个时候 Docker 提供的环境隔离能力让我们可以使用环境变量来配置应用程序,在 Docker 和 Kubernetes 中,会大量使用环境变量,而不是使用命令行来配置基础配置
环境变量的配置有如下特点:
1、对于配置的分层键,支持使用双下横线 "__" 代替 ":"
2、支持根据前缀加载
在某些操作系统,比如说 Linux 下面,冒号作为环境变量的 Key 值是不行的,所以说这里支持用双下划线来代替冒号,也就是说当遇到双下划线的环境变量时,可以认为这是一个分层键
环境变量提供程序还支持根据环境变量的前缀来加载
接下来时代码演示
源码链接:
https://github.com/witskeeper/geektime/tree/master/samples/ConfigurationEnvironmentVariablesDemo首先引入三个包
Microsoft.Extensions.Configuration.Abstractions
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.EnvironmentVariables
然后看一下环境变量如何在调试环境下注入
右键项目,属性,调试,环境变量
同样的在 Properties 下的 launchSettings.json 可以看到配置
{ "profiles": { "ConfigurationEnvironmentVariablesDemo": { "commandName": "Project", "environmentVariables": { "KEY1": "value1", "KEY2": "value2", "SECTION1__KEY3": "value3", "SECTION1__SECTION2__KEY4": "value4", "XIAO_KEY1": "xiao key1" } } }}
主程序
namespace ConfigurationEnvironmentVariablesDemo{ class Program { static void Main(string[] args) { var builder = new ConfigurationBuilder(); builder.AddEnvironmentVariables(); var configurationRoot = builder.Build(); Console.WriteLine($"key1:{configurationRoot["key1"]}"); } }}
启动程序,输出如下:
key1:value1
分层键
// "SECTION1__KEY3": "value3"// 我们定义了一个分层键 SECTION1,用双下划线隔开,这个 p 下面有一个 KEY3 的 Keyvar p = configurationRoot.GetSection("SECTION1");Console.WriteLine($"KEY3:{p["KEY3"]}");
启动程序,输出如下:
KEY3:value3
多级分层键
// "SECTION1__SECTION2__KEY4": "value4"var p2 = configurationRoot.GetSection("SECTION1:SECTION2");Console.WriteLine($"KEY4:{p2["KEY4"]}");
启动程序,输出如下:
KEY4:value4
前缀过滤:是指在注入环境变量的时候,指定一个前缀,意味着只注入指定前缀的环境变量,而不是把整个操作系统的所有环境变量注入进去
// "XIAO_KEY1": "xiao key1"// build 之后把读取到的环境变量的前缀去掉builder.AddEnvironmentVariables("XIAO_");var configurationRoot = builder.Build();Console.WriteLine($"KEY1:{configurationRoot["KEY1"]}");// "KEY2": "value2"// 在注入的时候,凡是没有 XIAO_ 开头的 Key 都没有注入进来,仅注册进来需要的一个环境变量值// 适合当需要加载特定的值,去掉系统其他值的干扰项的场景使用Console.WriteLine($"KEY2:{configurationRoot["KEY2"]}");
启动程序,输出如下:
KEY1:xiao key1KEY2:value2
转载地址:http://sfwdi.baihongyu.com/