前言
配置是应用程序发布到各种环境的必备能力
配置框架的核心组件包
- Microsoft.Extensions.Configuration. Abstractions--抽象包
- ●Microsoft.Extensions.Configuration--实现包
在我们通常使用的配置,都是以key和value的形式来存放的,无论是使用Json还是XML本质上都是key和value的结构,配置框架也是以key-value键值对的方式抽象了配置。这就意味着我们在使用的时候只关心key和value就可以了。
另外配置框架还支持配置各种数据源,比如我们可以从命令行读取,从环境变量读取,从文件读取。
配置框架的核心类型
- IConfiguration
- IConfigurationRoot
- IConfigurationSection
- IConfigurationBuilder
配置框架有一个核心的扩展点,就是诸如我们自己的配置源,也就是说我们可以指定任意的配置数据来源注入到我们的配置框架里面。
使用Nuget引入两个核心组件包
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
namespace ConfigurationDemo
{
class Program
{
static void Main(string[] args)
{
IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddInMemoryCollection(new Dictionary<string, string>()
{
{ "key1","value1" },
{ "key2","value2" },
{ "section1:key4","value4" },
});
IConfigurationRoot configurationRoot = builder.Build();
IConfiguration config = configurationRoot;
Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);
}
}
}
第1行代码:Config builder是用来构建我们配置的核心,我们所有的配置都是在Builder中完成。
第2行代码:是我们注入了一个内存的配置数据源,定义了三个配置
第3行代码:Builder方法是用来把所有的配置构建出来,并且获得一个IConfigurationRoot ,IConfigurationRoot 表示我们配置的根,也就是说我们读取配置的动作都需要从IConfigurationRoot这个对象读取的。
运行项目可以看到程序获取到了key1和key2的值并打印了出来。
section
section 的作用是指当我们的配置不仅仅是简单的key value的时候,比如说需要把配置分组这个时候我们就可以用section来定义。section每一节是用冒号来作为节的分隔符。
比如说我们定义了section1我们用冒号来连接我们的key
IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddInMemoryCollection(new Dictionary<string, string>()
{
{ "key1","value1" },
{ "key2","value2" },
{ "section1:key4","value4" },
{ "section2:key5","value5" },
{ "section2:key6","value6" },
{ "section2:section3:key7","value7" }
});
获取 section
获取section1并打印section1里面的“key4”
IConfigurationSection section = configurationRoot.GetSection("section1");
Console.WriteLine($"key4:{section["key4"]}");
多级嵌套
比如我们在section2中嵌套section3
{"section2:section3:key7","value7"}
获取并输出section3的“key7”
var section3 = section2.GetSection("section3");
Console.WriteLine($"key7:{section3["key7"]}");