.NET Core开发实战课程备忘(5) -- 配置框架:让服务无缝适应各种环境

概念

配置框架的核心包

与依赖注入框架的核心包类似,使用的是接口实现分离的设计模式

1
2
Microsoft.Extensions.Configuration              //实现包
Microsoft.Extensions.Configuration.Abstractions //抽象包

框架配置

  • key-value字符串键值对的方式抽象了配置
  • 支持从各种不同的数据源读取配置,比如从命令行读取、环境变量读取、从文件读取等

配置框架核心类型

1
2
3
4
IConfiguration
IConfigurationRoot
IConfigurationSection
IConfigurationBuilder

配置框架扩展点

可以通过拓展点注入我们自己的配置源,也就是我们可以指定任意我们指定的配置源到我们的配置框架中去

1
2
IConfigurationSource
IConfigurationProvider

代码实现

创建项目

创建名字为ConfigurationDemo控制台应用,通过nuget引入以下两个包:

1
2
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Abstractions

完善代码

Program.csMain完善测试代码,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
namespace ConfigurationDemo
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder();
builder.AddInMemoryCollection(new Dictionary<string, string>()
{
{"key1", "value1"},
{"key2", "value2"},
{"sectionA:key4", "value4"}
});
var configurationRoot = builder.Build();
Console.WriteLine($"key1={configurationRoot["key1"]}");
Console.WriteLine($"key2={configurationRoot["key2"]}");
var sectionA = configurationRoot.GetSection("sectionA");
Console.WriteLine($"sectionA:key4={sectionA["key4"]}");
}
}
}

创建一个ConfigurationBuilder对象,添加内存配置源,然后调用Build方法来生成一个IConfigurationRoot对象,通过这个对象可以直接获取配置源的配置项,用:来区分多个层级,通过GetSetion可获取指定层级,可以依次推各个层级的键值对