.NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记
10 | 環(huán)境變量配置提供程序:容器環(huán)境下配置注入的最佳途徑
環(huán)境變量的配置提供程序主要適應(yīng)場(chǎng)景:
1、在 Docker 中運(yùn)行時(shí)
2、在 Kubernetes 中運(yùn)行時(shí)
3、需要設(shè)置 ASP.NET Core 的一些內(nèi)置特殊配置時(shí)
環(huán)境變量和命令行這兩個(gè)提供程序在早期是沒(méi)有容器化的,當(dāng)時(shí)一個(gè)操作系統(tǒng)會(huì)跑多個(gè)應(yīng)用程序,應(yīng)用程序注入配置的方式一般都是通過(guò)文件或者是命令行的方式來(lái)注入的,環(huán)境變量當(dāng)時(shí)用的比較少
現(xiàn)在在容器化的環(huán)境下,有了 Docker 的隔離能力,就意味著每一個(gè)應(yīng)用程序都相當(dāng)于跑在一個(gè)小型的操作系統(tǒng)下面一樣,所以說(shuō)這個(gè)時(shí)候 Docker 提供的環(huán)境隔離能力讓我們可以使用環(huán)境變量來(lái)配置應(yīng)用程序,在 Docker 和 Kubernetes 中,會(huì)大量使用環(huán)境變量,而不是使用命令行來(lái)配置基礎(chǔ)配置
環(huán)境變量的配置有如下特點(diǎn):
1、對(duì)于配置的分層鍵,支持使用雙下橫線 "__" 代替 ":"
2、支持根據(jù)前綴加載
在某些操作系統(tǒng),比如說(shuō) Linux 下面,冒號(hào)作為環(huán)境變量的 Key 值是不行的,所以說(shuō)這里支持用雙下劃線來(lái)代替冒號(hào),也就是說(shuō)當(dāng)遇到雙下劃線的環(huán)境變量時(shí),可以認(rèn)為這是一個(gè)分層鍵
環(huán)境變量提供程序還支持根據(jù)環(huán)境變量的前綴來(lái)加載
接下來(lái)時(shí)代碼演示
源碼鏈接:
https://github.com/witskeeper/geektime/tree/master/samples/ConfigurationEnvironmentVariablesDemo
首先引入三個(gè)包
Microsoft.Extensions.Configuration.Abstractions
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.EnvironmentVariables
然后看一下環(huán)境變量如何在調(diào)試環(huán)境下注入
右鍵項(xiàng)目,屬性,調(diào)試,環(huán)境變量
同樣的在 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"]}");}} }啟動(dòng)程序,輸出如下:
key1:value1分層鍵
// "SECTION1__KEY3": "value3" // 我們定義了一個(gè)分層鍵 SECTION1,用雙下劃線隔開(kāi),這個(gè) p 下面有一個(gè) KEY3 的 Key var p = configurationRoot.GetSection("SECTION1"); Console.WriteLine($"KEY3:{p["KEY3"]}");啟動(dòng)程序,輸出如下:
KEY3:value3多級(jí)分層鍵
// "SECTION1__SECTION2__KEY4": "value4" var p2 = configurationRoot.GetSection("SECTION1:SECTION2"); Console.WriteLine($"KEY4:{p2["KEY4"]}");啟動(dòng)程序,輸出如下:
KEY4:value4前綴過(guò)濾:是指在注入環(huán)境變量的時(shí)候,指定一個(gè)前綴,意味著只注入指定前綴的環(huán)境變量,而不是把整個(gè)操作系統(tǒng)的所有環(huán)境變量注入進(jìn)去
// "XIAO_KEY1": "xiao key1" // build 之后把讀取到的環(huán)境變量的前綴去掉 builder.AddEnvironmentVariables("XIAO_"); var configurationRoot = builder.Build(); Console.WriteLine($"KEY1:{configurationRoot["KEY1"]}"); // "KEY2": "value2" // 在注入的時(shí)候,凡是沒(méi)有 XIAO_ 開(kāi)頭的 Key 都沒(méi)有注入進(jìn)來(lái),僅注冊(cè)進(jìn)來(lái)需要的一個(gè)環(huán)境變量值 // 適合當(dāng)需要加載特定的值,去掉系統(tǒng)其他值的干擾項(xiàng)的場(chǎng)景使用 Console.WriteLine($"KEY2:{configurationRoot["KEY2"]}");啟動(dòng)程序,輸出如下:
KEY1:xiao key1 KEY2:value2 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的.NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Magicodes.IE基础教程之导出P
- 下一篇: dotnetcore3.1 WPF 实现