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

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

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

  • Microsoft.Extensions.Configuration.Abstractions

  • Microsoft.Extensions.Configuration

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

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

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

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

  • IConfiguration

  • IConfigurationRoot

  • IConfigurationSection

  • IConfigurationBuilder

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

  • IConfigurationSource

  • IConfigurationProvider

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

源码链接:

https://github.com/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"]);}}
}

启动程序,输出如下:

value1
value2

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"]}");}}
}

启动程序,输出如下:

value1
value2
key4:value4
key5:

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

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

  1. .NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(上)

    05 | 依赖注入:良好架构的起点 为什么要使用依赖注入框架 借助依赖注入框架,我们可以轻松管理类之间的依赖,帮助我们在构建应用时遵循设计原则,确保代码的可维护性和可扩展性 ASP.NET Core ...

  2. .NET Core开发实战(定义API的最佳实践)Source Generators版

    前言 极客时间上的<.NET Core开发实战>是一门非常好的课程,作者肖伟宇在第31课(https://time.geekbang.org/course/detail/100044601 ...

  3. 小米手环iOS开发实战(一):iOS蓝牙框架CoreBluetooth

    小米手环iOS开发实战(一):iOS蓝牙框架CoreBluetooth 本项目为对小米手环进行二次开发,利用了小米手环蓝牙连接并不安全的特性,连接后可以获取手环数据,并可修改数据. 本实例使用Swif ...

  4. gram矩阵的性质_第十七课:正交矩阵和GramSchmidt正交化——MIT线性代数课程学习笔记...

    公众号关注  "DL_NLP" 设为 "星标",重磅干货,第一时间送达! ◎ 原创 | 深度学习算法与自然语言处理 ◎ 作者 | 丁坤博 一. 知识概要 这一节 ...

  5. .NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...

    15 | 选项框架:服务组件集成配置的最佳实践 这一节讲解如何使用选项框架来处理服务和配置的关系 选项框架的特性: 1.支持单例模式读取配置 2.支持快照 3.支持配置变更通知 4.支持运行时动态修改 ...

  6. .NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记

    10 | 环境变量配置提供程序:容器环境下配置注入的最佳途径 环境变量的配置提供程序主要适应场景: 1.在 Docker 中运行时 2.在 Kubernetes 中运行时 3.需要设置 ASP.NET ...

  7. .NET Core开发实战(第16课:选项数据热更新:让服务感知配置的变化)--学习笔记...

    16 | 选项数据热更新:让服务感知配置的变化 选项框架还有两个关键类型: 1.IOptionsMonitor 2.IOptionsSnapshot 场景: 1.范围作用域类型使用 IOptinsSn ...

  8. .NET Core开发实战(第14课:自定义配置数据源:低成本实现定制化配置方案)--学习笔记...

    14 | 自定义配置数据源:低成本实现定制化配置方案 这一节讲解如何定义自己的数据源,来扩展配置框架 扩展步骤 1.实现 IConfigurationSource 2.实现 IConfiguratio ...

  9. ASP.NET Core分布式项目实战(业务介绍,架构设计,oAuth2,IdentityServer4)--学习笔记...

    任务4:第一章计划与目录 敏捷产品开发流程 原型预览与业务介绍 整体架构设计 API 接口设计 / swagger Identity Server 4 搭建登录 账号 API 实现 配置中心 任务5: ...

最新文章

  1. 基于改进的点对特征的6D位姿估计
  2. 矩阵逆时针旋转90度JAVA_java实现的顺时针/逆时针打印矩阵操作示例
  3. Vue Bootstrap OSS 实现文件上传
  4. 对百度超级链Xuper使用过程中的进一步理解
  5. __proto__和prototype 小记
  6. C++实现 电子邮件客户端程序(简易版)
  7. MATLAB主题设置配色方案
  8. Vue的一些知识汇总---希望对你有用
  9. 【UVM基础】两种启动 sequence 的方式
  10. #2阴阳师首页模块模拟
  11. dell设置从ssd启动_戴尔笔记本加了固态硬盘后怎么设置从固态硬盘启动
  12. VVC多用途视频编码标准综述与应用1
  13. 如何设计一个高并发的存储系统
  14. 《C Primer Plus》第七章--C控制语句:分支和跳转(if else switch continue break goto 逻辑运算符ctype.h)
  15. 如何解决MYSQL安装包上传Xftp失败问题
  16. NodeMCU 通过MQTT 连接阿里云物联网
  17. UART项目验证(一) uart协议与uart ip的理解
  18. 用什么条码标签制作软件批量打印产品吊牌?
  19. Python中出现TypeError: ‘int‘ object is not iterable的解决方法
  20. 无人驾驶技术——P5:3D Object Tracking

热门文章

  1. [Usaco2007 Demo][BZOJ1628] City skyline
  2. 公众平台关注用户达到5万即可开通流量主功能 可以推广APP应用
  3. linux显示fio为非法指令,FORTRAN运行错误消息列表中英对照.doc
  4. versa max_如何从Mac(和Vice Versa)打开或关闭iPhone的Safari选项卡
  5. 【python】抄写大神的百度贴吧代码
  6. Oracle 常用sql场景应用(未完待续......)
  7. 控制用户的访问之权限、角色【weber出品必属精品】
  8. 如何改变X:\Users\XXX的用户名称
  9. 淘宝快捷通道——百汇家园
  10. Xamarin效果第四篇之CollectionView子项右侧布局