.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 ...
随机推荐
- P5719 水题
https://www.luogu.com.cn/problem/P5719 唠唠:别看这题很水,且只要求保留小数点后一位,倘若用float而不是double的话就无法AC,洛谷评测则只有40分.所以 ...
- DOCKER本地仓库
概述 随着docker的应用越来越多,安装部署越来越方便,批量自动化的镜像生成和发布都需要docker仓库的本地化应用. 试用了docker的本地仓库功能,简单易上手,记录下来以备后用. 环境 cen ...
- mysql批量替换字段
一.需求将数据库内指定的数据进行批量修改,可使用replace函数如IP:端口号,只改端口号的部分,将所有192.168.1.1:8001的数据8001的端口号修改为3001replace函数的用法如 ...
- 完美:C# Blazor中显示Markdown并添加代码高亮
昨天发了一篇介绍这个库:C# Blazor中显示Markdown文件,介绍怎么在Blazor中显示Markdown内容的文章,文章内的代码是没有高亮的,思来相去,还是要做好,于是百度到这篇文章.NET ...
- 基于AHB_BUS的eFlash控制器的微架构设计
eFlash微架构设计 1.回顾架构设计 2.Flash时序仿真 2.1 ahb_flashc项目目录 docs rtl sim tb model 2.2 docs 架构设计文档 微架构设计文档 集成 ...
- 【rt-thread】SConscript文件添加格式必须是4空格开头
SConscript文件添加格式必须是4空格开头,TAB或其他数量的空格均错误
- 程序&命名-执行环境
开发程序执行环境 系统级别 -- 编译器或解释器 程序级别 -- 命令行参数.配置文件 执行级别 -- 进程.线程.协程运行时上下文(树(命名空间 -- 函数-局部变量.包或模块-全局变量)) 命令行 ...
- [转帖]Oracle与防火墙
https://www.laoxiong.net/oracle_and_firewall.html 老熊 Oracle数据库管理 2009-04-20 最近有两次Oracle数据库故障与防火墙有关.这 ...
- [转帖]elasticsearch8.0以上版本修改内置用户密码
https://www.cnblogs.com/zhang-ding-1314/p/16199682.html 修改密码需要在es启动,并cd到es的bin目录下执行: 1.重置密码并在控制台显示新密 ...
- [转帖]Linux运维常用150个命令
Linux运维常用150个命令 转载自:www.cnblogs.com/bananaaa/p/7774467.html 命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更 ...