100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > .NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记

.NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记

时间:2024-06-09 13:07:31

相关推荐

.NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记

08 | 配置框架:让服务无缝适应各种环境

配置是应用程序发布到各种环境的必备能力,这一节开始详细讲解 Core 的配置框架

配置框架的核心包有两个,一个抽象包,一个实现包

Microsoft.Extensions.Configuration.Abstractions

Microsoft.Extensions.Configuration

这与依赖注入框架一样,也是使用了接口实现分离的设计模式

配置框架以 Key-value 字符串键值对的方式抽象了配置

同时还支持从各种不同的数据源读取配置,比如从命令行读取,从环境变量读取,从文件中读取

配置框架的核心接口有四个

IConfiguration

IConfigurationRoot

IConfigurationSection

IConfigurationBuilder

配置框架有一个核心的扩展点,就是注入自己的配置源,也就是说可以指定任意的配置的数据来源,注入到配置框架里面

IConfigurationSource

IConfigurationProvider

接下来通过一个基本的控制台应用程序从头到尾演示一个配置的构建和使用

源码链接:

/witskeeper/geektime/tree/master/samples/ConfigurationDemo

首先引入上面提到的两个包

Microsoft.Extensions.Configuration.Abstractions

Microsoft.Extensions.Configuration

接着是构建和使用

namespace ConfigurationDemo{class Program{static void Main(string[] args){// ConfigurationBuilder 是用来构建配置的核心,所有设置都在 builder 中完成IConfigurationBuilder builder = new ConfigurationBuilder();// 注入一个内存的配置数据源(注入一个字典集合作为配置数据源)builder.AddInMemoryCollection(new Dictionary<string, string>(){{ "key1","value1" },{ "key2","value2" },});// Build 方法用来把所有的配置构建出来,并且获得一个 configurationRoot,表示配置的根// 也就是说读取配置的动作都需要从 IConfigurationRoot 这个对象读取的IConfigurationRoot configurationRoot = builder.Build();Console.WriteLine(configurationRoot["key1"]);Console.WriteLine(configurationRoot["key2"]);}}}

启动程序,输出如下:

value1value2

IConfigurationSection

namespace ConfigurationDemo{class Program{static void Main(string[] args){// ConfigurationBuilder 是用来构建配置的核心,所有设置都在 builder 中完成IConfigurationBuilder builder = new ConfigurationBuilder();// 注入一个内存的配置数据源(注入一个字典集合作为配置数据源)builder.AddInMemoryCollection(new Dictionary<string, string>(){{ "key1","value1" },{ "key2","value2" },{ "p1:key4","value4" },{ "p2:key5","value5" },{ "p2:key6","value6" },});// Build 方法用来把所有的配置构建出来,并且获得一个 configurationRoot,表示配置的根// 也就是说读取配置的动作都需要从 IConfigurationRoot 这个对象读取的IConfigurationRoot configurationRoot = builder.Build();//IConfiguration config = configurationRoot;Console.WriteLine(configurationRoot["key1"]);Console.WriteLine(configurationRoot["key2"]);// p 的作用是指当配置不仅仅是简单的 Key value 的时候,比如说需要给配置分组,就可以使用 p 来定义// p 每一节是用冒号来作为节的分隔符的IConfigurationSection p = configurationRoot.GetSection("p1");Console.WriteLine($"key4:{p["key4"]}");Console.WriteLine($"key5:{p["key5"]}");}}}

启动程序,输出如下:

value1value2key4:value4key5:

p1 的 key5 没有值

打印一下 p2 的 key5

IConfigurationSection p2 = configurationRoot.GetSection("p2");Console.WriteLine($"key5_v2:{p2["key5"]}");

启动程序,输出如下:

key5_v2:value5

多级嵌套

{ "p2:p3:key7","value7" }

打印输出

var p3 = p2.GetSection("p3");Console.WriteLine($"key7:{p3["key7"]}");

启动程序,输出如下:

key7:value7

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。