本节学习.NET Core的配置框架,通过配置框架可以以不同的方式来配置不同环境下的服务,以使服务无缝适应各种环境。
核心组件包
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft.Extensions.Configuration
配置框架
- 以key-value字符串键值对的方式抽象了配置
- 支持从各种不同的数据源读取配置
配置框架核心类型
- IConfiguration
- IConfigurationBuilder
- IConfigurationRoot
- IConfigurationSection
配置框架扩展点
- IConfigurationSource
- IConfigurationProvider
配置框架的种类
- 内存配置
- 命令行配置
- 环境变量配置
- 文件提供程序配置
通过代码来理解框架的核心类型
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection( new Dictionary<string, string>() { {"key1","value1" }, {"key2","value2" }, {"section1:key3","value3" }, {"section2:section3:key4","value4" } } ); IConfigurationRoot configurationRoot = configurationBuilder.Build(); Console.WriteLine($"key1:{configurationRoot["key1"]}"); Console.WriteLine($"key2:{configurationRoot["key2"]}"); Console.WriteLine($"key3:{configurationRoot["section1:key3"]}"); IConfigurationSection section1 = configurationRoot.GetSection("section1"); Console.WriteLine($"section1_key3:{section1["key3"]}"); IConfigurationSection section3 = configurationRoot.GetSection("section2:section3"); Console.WriteLine($"section2_section3_key4:{section3["key4"]}");
- 配置的构建都通过IConfigurationBuilder来完成
- 配置通过Builder创建,得到一个配置跟IConfigurationRoot
- 有的配置有“节”,通过“:”来分割,获取节通过IConfigurationSection
这里注意以下几点
- 获取section内的值,可以直接通过section:key的完整方式获取
- 后面讲到环境变量配置方式时,其中可用"__"来代替“:”,注意该方式只适用于环境变量配置方式,其他方式不适用。
从下节开始,学习几种不同的配置方式。
源码可访问
https://github.com/IronMarmot/Samples/tree/master/CoreSamples