100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > .NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记

.NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记

时间:2022-09-17 12:41:08

相关推荐

.NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记

10 | 环境变量配置提供程序:容器环境下配置注入的最佳途径

环境变量的配置提供程序主要适应场景:

1、在 Docker 中运行时

2、在 Kubernetes 中运行时

3、需要设置 Core 的一些内置特殊配置时

环境变量和命令行这两个提供程序在早期是没有容器化的,当时一个操作系统会跑多个应用程序,应用程序注入配置的方式一般都是通过文件或者是命令行的方式来注入的,环境变量当时用的比较少

现在在容器化的环境下,有了 Docker 的隔离能力,就意味着每一个应用程序都相当于跑在一个小型的操作系统下面一样,所以说这个时候 Docker 提供的环境隔离能力让我们可以使用环境变量来配置应用程序,在 Docker 和 Kubernetes 中,会大量使用环境变量,而不是使用命令行来配置基础配置

环境变量的配置有如下特点:

1、对于配置的分层键,支持使用双下横线 "__" 代替 ":"

2、支持根据前缀加载

在某些操作系统,比如说 Linux 下面,冒号作为环境变量的 Key 值是不行的,所以说这里支持用双下划线来代替冒号,也就是说当遇到双下划线的环境变量时,可以认为这是一个分层键

环境变量提供程序还支持根据环境变量的前缀来加载

接下来时代码演示

源码链接:

/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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。