.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 ...
随机推荐
- VueTreeselect
https://www.vue-treeselect.cn/ 官网简介
- vue3常用 Composition API
1.拉开序幕的setup 理解:Vue3.0中一个新的配置项,值为一个函数. setup是所有Composition API(组合API)" 表演的舞台 ". 组件中所用到的:数据 ...
- 封装http并挂载到全局
https://www.bilibili.com/video/BV1BJ411W7pX?p=32 具体使用:https://blog.csdn.net/weixin_44763569/article/ ...
- C++ list容器
一.前言 list容器,又称为双向链表容器,即该容器的底层是以双向链表的形式实现的,因此list容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中. list容器中各个元素的 ...
- Go——语言特性
golang 简介 来历 很久以前,有一个IT公司,这公司有个传统,允许员工拥有20%自由时间来开发实验性项目.在2007的某一天,公司的几个大牛,正在用c++开发一些比较繁琐但是核心的工作,主要包括 ...
- [转帖]MySQL Decimal 的实现方法
码: 背景 数字运算在数据库中是很常见的需求, 例如计算数量.重量.价格等, 为了满足各种需求, 数据库系统通常支持精准的数字类型和近似的数字类型. 精准的数字类型包含 int, decimal 等, ...
- [转帖]Jmeter学习笔记(二十一)——Concurrency Thread Group阶梯式加压测试
https://www.cnblogs.com/pachongshangdexuebi/p/11739064.html 一.先安装jmeter的插件管理工具 1.下载地址:jmeter-plugins ...
- [转帖]linux内存挂载
1.主要功能 在linux中,为了提高读写速度,可以将内存挂载到目录,常见的文件格式有tmpfs和ramfs. 2.挂载步骤 $ sudo mkdir /mnt/tmp $ sudo mkdir /m ...
- [转帖]vCenter使用 VMCA 续订证书:续订证书时发生意外错误
https://www.dinghui.org/vcenter-sts-certificate.html 起因:有一处客户vCenter告警:STS签名证书即将过期. 处理办法:系统管理-证书-证书管 ...
- isolcpus的学习与了解
isolcpus的学习与了解 前言 最近一直跟同事说要进行CPU的bind bind到具体的core 当时还一直装B, 说这样能够提高性能. 但是今天起床早上查看资料时发现,其实是先设置隔离的. 让操 ...