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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【译】探索更轻量的Electron替代品来托管Blazor桌面应用程序

本文翻译自 ASP.NET 项目组的 Steve Sanderson 的博客&#xff0c;发表于 2019 年 11 月 1 日。Steve Sanderson 是 Blazor 最早的创造者。这篇文章发布后还有一篇后续&#xff0c;是介绍一个在本文提到的跨平台 webview 概念的落地项目 WebWindow &#xff0c;我也会接着翻译过…

mysql 剔除不可见字符_不可见字符,Excel里最隐蔽的坑

小伙伴们好啊&#xff0c;我是流浪铁匠&#xff0c;今天为大家介绍的是excel数据整理时一类最常见的坑——不可见字符。从unichar函数对应的uincode字符集结果来说&#xff0c;excel大约有111万个字符&#xff0c;其中有不少字符的性质千奇百怪&#xff0c;由于unichar/unicode…

同为Chromium浏览器,Edge却被“特别关照”

谷歌会在 Microsoft Edge 用户访问 Chrome Web Store&#xff08;Chrome 网上应用商店&#xff09; 时发去一条通知提醒&#xff0c;建议用户切换到 Google Chrome 以安全地使用扩展程序&#xff0c;通知还提供了下载 Google Chrome 的链接。不过有趣的是&#xff0c;其他 Chro…

噪声与振动控制工程手册_声学分享客噪声与振动控制篇大型隔振工程案例介绍...

第一期《声学分享客--噪声与振动控制篇》将于今日上午10&#xff1a;00~11&#xff1a;00&#xff0c;在线直播&#xff0c;欢迎各位上线交流。主讲人&#xff1a;苏宏兵报告内容&#xff1a;大型隔振工程案例介绍报告人介绍&#xff1a;苏宏兵&#xff0c;工学硕士&#xff0c…

微软推出全新的Windows 10系统图标

微软已开始通过 Fast Ring 向 Insider 用户推出新的 Windows 10 系统图标&#xff0c;这些新图标基于 Fluent 设计。更改从邮件和日历等程序开始&#xff0c;微软将陆续推出更多彩色图标。这些图标将在接下来的几个月中通过 Microsoft Store 的应用更新和 Windows 10 的发布预览…

.NET Core开发实战(第9课:命令行配置提供程序)--学习笔记

09 | 命令行配置提供程序&#xff1a;最简单快捷的配置注入方法这一节讲解如何使用命令行参数来作为配置数据源命令行配置&#xff08;提供程序的&#xff09;支持三种格式的命令1、无前缀的 keyvalue 模式2、双中横线模式 --keyvalue 或 --key value3、正横杠模式 /keyvalue 或…

gRPC in ASP.NET Core 3.x - gRPC 消息定义

之前写了几篇关于 Protoco Buffer 的文章。gRPC in ASP.NET Core 3.x - gRPC 简介&#xff08;1&#xff09;gRPC in ASP.NET Core 3.x - gRPC 简介&#xff08;2&#xff09;当gRPC使用Protocol Buffer作为传输协议的时候&#xff0c;Protocol Buffer里所有的规则仍然都适用。…

10个用于C#.NET开发的基本调试工具

在调试软件时&#xff0c;工具非常重要。获取正确的工具&#xff0c;然后再调试时提取正确的信息。根据获取的正确的错误信息&#xff0c;可以找到问题的根源所在。找到问题根源所在&#xff0c;你就能够解决该错误了。你将看到我认为最基本的解决在C# .NET 中错误问题的工具的…

[蓝桥杯2015初赛]移动距离

题目描述 X星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。 其楼房的编号为1,2,3… 当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。 比如&#xff1a;当小区排号宽度为6时&#xff0c;开始情形如下&#xff1a; 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 …

最长公共子序列-dp

一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以不删除任何字符&#xff09;后组成的新字符串。 例如&#xff0c;“ace” 是 “abcde” 的子序列&#xff0c;但 “aec” 不是 “abcde” …

将 ASP.NET Core 2.1 升级到最新的长期支持版本ASP.NET Core 3.1

目录前言Microsoft.AspNetCore.Mvc.ViewFeatures.Internal 消失了升级到 ASP.NET Core 3.1项目文件&#xff08;.csproj&#xff09;Program.csStartup.csViewBag 与 Razor Pages 第一次接触ViewBag 与 Razor Pages 第二次接触小结&#xff08;文件更改对比图&#xff09;ASP.N…

WTM系列视频教程:View和Taghelper

文字摘要&#xff1a;“又到了老刘胡说的时间了&#xff0c;今天我们主要聊一下View和TagHelper。在前后端不分离的模式下&#xff0c;View还是很重的一块。”“前几课有朋友反馈说收获很大&#xff0c;也有朋友反应基础内容太多&#xff0c;众口难调啊。这个系列教程还是希望有…

sketch里的ios控件_30个让你眼前一亮的iOS Swift UI控件!

前言笔者接触 iOS 开发有一段时间了&#xff0c;尤其特别喜欢UI部分&#xff0c;特意收集整理了30个让你惊艳的第三方开源控件&#xff08;swift&#xff09;&#xff0c;无论是应用到项目中还是用来学习都能让你大呼过瘾&#xff0c;废话不多说&#xff0c;直接上图上链接&…

Magicodes.IE基础教程之导出Pdf

说明本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出要点导出PDF数据自定义PDF模板导出单据如何批量导出单据导出特性说明PdfExporterAttributePdfExporterAttribute特性用于设置Pdf导出的总体设置&#xff0c;比如方向、纸张等。主要包含如下设置&#xff1a;Name:文档…