.NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记
08 | 配置框架:让服务无缝适应各种环境
配置是应用程序发布到各种环境的必备能力,这一节开始详细讲解 ASP.NET Core 的配置框架
配置框架的核心包有两个,一个抽象包,一个实现包
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft.Extensions.Configuration
这与依赖注入框架一样,也是使用了接口实现分离的设计模式
配置框架以 Key-value 字符串键值对的方式抽象了配置
同时还支持从各种不同的数据源读取配置,比如从命令行读取,从环境变量读取,从文件中读取
配置框架的核心接口有四个
- IConfiguration
- IConfigurationRoot
- IConfigurationSection
- IConfigurationBuilder
配置框架有一个核心的扩展点,就是注入自己的配置源,也就是说可以指定任意的配置的数据来源,注入到配置框架里面
- IConfigurationSource
- IConfigurationProvider
接下来通过一个基本的控制台应用程序从头到尾演示一个配置的构建和使用
首先引入上面提到的两个包
- 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" },
{ "section1:key4","value4" },
{ "section2:key5","value5" },
{ "section2:key6","value6" },
});
// Build 方法用来把所有的配置构建出来,并且获得一个 configurationRoot,表示配置的根
// 也就是说读取配置的动作都需要从 IConfigurationRoot 这个对象读取的
IConfigurationRoot configurationRoot = builder.Build();
//IConfiguration config = configurationRoot;
Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);
// section 的作用是指当配置不仅仅是简单的 Key value 的时候,比如说需要给配置分组,就可以使用 section 来定义
// section 每一节是用冒号来作为节的分隔符的
IConfigurationSection section = configurationRoot.GetSection("section1");
Console.WriteLine($"key4:{section["key4"]}");
Console.WriteLine($"key5:{section["key5"]}");
}
}
}
启动程序,输出如下:
value1
value2
key4:value4
key5:
section1 的 key5 没有值
打印一下 section2 的 key5
IConfigurationSection section2 = configurationRoot.GetSection("section2");
Console.WriteLine($"key5_v2:{section2["key5"]}");
启动程序,输出如下:
key5_v2:value5
多级嵌套
{ "section2:section3:key7","value7" }
打印输出
var section3 = section2.GetSection("section3");
Console.WriteLine($"key7:{section3["key7"]}");
启动程序,输出如下:
key7:value7
GitHub源码链接:
https://github.com/MingsonZheng/DotNetCoreDevelopmentActualCombat/tree/main/ConfigurationDemo



本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。
.NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记的更多相关文章
- [ASP.NET Core开发实战]基础篇06 配置
配置,是应用程序很重要的组成部分,常常用于提供信息,像第三方应用登录钥匙.上传格式与大小限制等等. ASP.NET Core提供一系列配置提供程序读取配置文件或配置项信息. ASP.NET Core项 ...
- 2月送书福利:ASP.NET Core开发实战
大家都知道我有一个公众号“恰童鞋骚年”,在公众号2020年第一天发布的推文<2020年,请让我重新介绍我自己>中,我曾说到我会在2020年中每个月为所有关注“恰童鞋骚年”公众号的童鞋们送一 ...
- WCF开发实战系列三:自运行WCF服务
WCF开发实战系列三:自运行WCF服务 (原创:灰灰虫的家 http://hi.baidu.com/grayworm)上一篇文章中我们建立了一个WCF服务站点,为WCF服务库运行提供WEB支持,我们把 ...
- [ASP.NET Core开发实战]开篇词
前言 本系列课程文章主要是学习官方文档,再输出自己学习心得,希望对你有所帮助. 课程大纲 本系列课程主要分为三个部分:基础篇.实战篇和部署篇. 希望通过本系列课程,能让大家初步掌握使用ASP.NET ...
- [ASP.NET Core开发实战]基础篇03 中间件
什么是中间件 中间件是一种装配到应用管道,以处理请求和响应的组件.每个中间件: 选择是否将请求传递到管道中的下一个中间件. 可在管道中的下一个中间件前后执行. ASP.NET Core请求管道包含一系 ...
- [ASP.NET Core开发实战]基础篇01 Startup
Startup,顾名思义,就是启动类,用于配置ASP.NET Core应用的服务和请求管道. Startup有两个主要作用: 通过ConfigureServices方法配置应用的服务.服务是一个提供应 ...
- 基于ASP.Net Core开发的一套通用后台框架
基于ASP.Net Core开发一套通用后台框架 写在前面 这是本人在学习的过程中搭建学习的框架,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 知其然,知其所以然,并非重 ...
- .NET Core开发实战(第11课:文件配置提供程序)--学习笔记
11 | 文件配置提供程序:自由选择配置的格式 文件配置提供程序 Microsoft.Extensions.Configuration.Ini Microsoft.Extensions.Configu ...
- 2、SpringBoot接口Http协议开发实战8节课(1-6)
1.SpringBoot2.xHTTP请求配置讲解 简介:SpringBoot2.xHTTP请求注解讲解和简化注解配置技巧 1.@RestController and @RequestMapping是 ...
- [ASP.NET Core开发实战]基础篇02 依赖注入
ASP.NET Core的底层机制之一是依赖注入(DI)设计模式,因此要好好掌握依赖注入的用法. 什么是依赖注入 我们看一下下面的例子: public class MyDependency { pub ...
随机推荐
- python+appium使用方法
一.python环境安装 确保需安装Appium-Python-Client包
- java项目实践-webapp-mytomcat-day16
目录 1. http协议 2. 自定义的web框架 3. 具体实现 4. 启动 1. http协议 CS架构 建立连接"三次握手" 断开连接 "四次挥手" 三次 ...
- 使用React简短代码动态生成栅格布局
使用React简短代码动态生成栅格布局 作为 TerminalMACS 的一个子进程模块 - React Web管理端,使用Ant Design Pro作为框架. 本文应用到的知识 1.样式文件les ...
- 【TouxhGFX】集成 之 《Using C code with TouchGFX》
在TouchGFX中使用C代码 您可能已经知道,TouchGFX是用C ++实现的,而TouchGFX API也是C ++.这意味着至少直接与UI相关的代码必须是C ++代码.但是,并不需要整个系统都 ...
- [转帖]比快更快的 ELK 8 安装使用指南-Elasticsearch,Kibana,Logstash
https://juejin.cn/post/7133907643386560519 携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情 Elastic 8 ...
- [转帖]Linux fuse用户态文件系统及其libfuse
https://www.jianshu.com/p/abc5524ac18c 为什么要有用户态文件系统 VFS文件系统可知文件系统在内核态的,应用程序操作文件,统一调用内核态的VFS层抽象接口. 突然 ...
- [转帖]Veeam Backup & Replication 10.0.0.4461安装部署(包含补丁)
原文:https://www.cnblogs.com/cnzay/p/15561893.html Veeam Backup & Replication 是一款数据保护软件,为VMware 和H ...
- 【转帖】磁盘IOPS的计算
计算磁盘IOPS的三个因素: 1.RAID类型的读写比 不同RAID类型的IOPS计算公式: RAID类型 公式 RAID5.RAID3 Drive IOPS=Read IOPS + 4*Write ...
- Oracle 修改参数
alter system set sga_max_size=30720M scope=spfile; alter system set sga_target=30720M; alter system ...
- 一文搞懂Redis
作者: 京东物流 刘丽侠 姚再毅 康睿 刘斌 李振 一.Redis的特性 1.1 Redis为什么快? 基于内存操作,操作不需要跟磁盘交互,单次执行很快 命令执行是单线程,因为是基于内存操作,单次执行 ...