核心组件包
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft.Extensions.Configuration
配置框架
- 以
**key-value**字符串键值对的方式抽象了配置 - 支持从不同的数据源读取配置
- 命令行、环境变量、文件
配置框架核心类型
- IConfiguration
- IConfigurationRoot
- 表示我们的配置的根
- IConfigurationSection
- Section作用是指,当我们的配置不是简单的key-value的shi’hou,比如把配置分组
- IConfigruationBuilder
- 构建配置的核心,我们所有的设置都是在build中完成
配置框架扩展点
注入我们自己的配置源,也就是说我们可以指定任意的配置的数据来源
- IConfigurationSource
- IConfigurationProvider
示例
新建控制台应用程序
using Microsoft.Extensions.Configuration;using System;using System.Collections.Generic;namespace ConfigurationDemo{class Program{static void Main(string[] args){// 使用默认的ConfigurationBuilder的实现IConfigurationBuilder builder = new ConfigurationBuilder();// 注入一个内存的配置数据源,键值对形式builder.AddInMemoryCollection(new Dictionary<string, string>{{ "key1","value1"},{ "key2","value2"}});// 使用Build把所有的配置构建出来,并且获得一个configurationRoot// configurationRoot就表示我们的配置的根,也就是说我们读取配置的动作// 都是需要从IConfigurationRoot这个对象读取的IConfigurationRoot configurationRoot = builder.Build();// 读取key1和key2Console.WriteLine(configurationRoot["key1"]);Console.WriteLine(configurationRoot["key2"]);}}}

使用默认的ConfigurationBuilder获取IConfigurationBuilder的实例
将一个字典集合注入一个内存配置源
使用IConfigurationBuilder.Build()将配置构建出来,获取IConfigurationRoot对象
根据IConfigurationRoot获取配置内容
当我们的程序不仅仅是简单的key-value的时候,例如分组
using Microsoft.Extensions.Configuration;using System;using System.Collections.Generic;namespace ConfigurationDemo{class Program{static void Main(string[] args){// 使用默认的ConfigurationBuilder的实现IConfigurationBuilder builder = new ConfigurationBuilder();// 注入一个内存的配置数据源,键值对形式builder.AddInMemoryCollection(new Dictionary<string, string>{{ "key1","value1"},{ "key2","value2"},// section每一节使用冒号来作为节的分隔符的{ "section1:key1","section2.value1"},{ "section2:key1","section2.value1"},{ "section2:key2","section2.value2"}});// 使用Build把所有的配置构建出来,并且获得一个configurationRoot// configurationRoot就表示我们的配置的根,也就是说我们读取配置的动作// 都是需要从IConfigurationRoot这个对象读取的IConfigurationRoot configurationRoot = builder.Build();// 读取key1和key2//Console.WriteLine(configurationRoot["key1"]);//Console.WriteLine(configurationRoot["key2"]);// 获取一个sectionIConfigurationSection configurationSection = configurationRoot.GetSection("section2");Console.WriteLine(configurationSection["key1"]);Console.WriteLine(configurationSection["key2"]);}}}

**section**每一节使用冒号来作为节的分隔符的
通过IConfigurationRoot.GetSection()获取一个Section
使用IConfigurationSection获取配置内容
也可以使用套娃来实现多节分组
在字典集合中添加:{ "section2:section3:key1","section2.section3.value1"}
使用configurationRoot.GetSection("section2").GetSection("section3");获取
