.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.cs
的Main
完善测试代码,具体代码如下:
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
可获取指定层级,可以依次推各个层级的键值对