.NET Core 配置Configuration杂谈

前言

.NET Core 在配置文件的操作上相对于.NET Framework做了不少改变,今天来聊一聊。关于Configuration的Package都是以Microsoft.Extensions.Configuration开头的支持多种方式的配置,包括内存、Json文件、XML文件等等,今天我们主要用Json格式文件配置来演示。

开始

新建一个ConsoleApp(这里为了方便演示就用控制台程序来演示了,而不用ASP.NET Core),添加两个Package:

Install-Package Microsoft.Extensions.Configuration -Version 2.0.1Install-Package Microsoft.Extensions.Configuration.Json -Version 2.0.1

添加Json配置文件,读取配置

var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");var config = builder.Build();//读取配置Console.WriteLine(config["Alipay:AppId"]);
Console.WriteLine(config["Alipay:PriviteKey"]);

我们的Json文件内容如下:

{"Alipay": {"AppId": "20185555","PriviteKey": "dasfdafafafa"} }

我们通过ConfigurationBuilder对象来创建ConfigurationRoot对象,并用其来读取配置。SetBasePath()方法是用来设置我们配置对象需要的配置文件的基础路径,比如我们将基础路径设置为C:\ConsoleApp,那么他读取我们的配置文件appsettings.json的路径将是C:\ConsoleApp\appsettings.json

运行:

多次调用 AddJsonFile 方法会发生什么

我们新建一个appsettings.Test.json文件,添加如下内容:

{"Alipay": {"AppId": "20185555Testss","PriviteKey": "dasfdafafafaTestss"} }

然后修改一下代码:

var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").AddJsonFile("appsettings.Test.json");

可以看见我们向ConfigurationBuilder对象设置了两次Json文件,看一下运行效果:

可以得出结论:读取配置的时候会选择最后添加的文件。

那么我们前一个文件去哪了呢?我们的ConfigurationRoot对象有一个Providers属性存储了,我们添加的文件信息,我们可以遍历它:

foreach (var provider in config.Providers)
{provider.TryGet("Alipay:AppId", out string val);Console.WriteLine(val);
}

运行:

可以看出我们两个文件的值都被读取到了!

配置重载

我们的配置文件可能会被更改,那么我们如何获取最新的配置?我们在添加文件的时候可以将一个名为reloadOnChange的参数设置为true,那么当我们的文件发生更改时,就会重新载入配置到内存中来,然后我们获取到的配置就行最新的。我们读取配置的时候并不是每次读取都是从文件里面读取,而是配置文件的所有配置信息都会被加载到内存中来,我们每次从内存读取就行了。

var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").AddJsonFile("appsettings.Test.json",true,reloadOnChange:true);
var config = builder.Build();//读取配置Console.WriteLine(config["Alipay:AppId"]); Console.WriteLine(config["Alipay:PriviteKey"]);Console.WriteLine("更改文件之后,按下任意键"); Console.ReadKey();Console.WriteLine("change:"); Console.WriteLine(config["Alipay:AppId"]); Console.WriteLine(config["Alipay:PriviteKey"]);Console.ReadKey();

我们看一下效果:

今天就到这里了!

Demo:https://github.com/stulzq/BlogDemos/tree/master/ConfigurationTest

原文:http://www.cnblogs.com/stulzq/p/8570496.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

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

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

相关文章

秘密:从程序员到领导者的微妙之处

读到一篇关于程序员、领导力和领导者的好文章,翻译过来分享下。借用一句文中的话:“好吧,我只是个程序员,为什么需要领导?” ,读完你就知道了。做一个优秀的领导者可能不是大部分程序员会立即认同的东西。许…

老衣的微服务实践简要指引2017版

这是老衣在2017年5月份总结的,适用于中小团队跨平台微服务开发的实践指引(简化版)。若有有不当之处,欢迎指点更正因本文涉及到大量第三方库或工具,详细学习和了解需要参考相关官方文档。若您在使用Mac电脑,…

Entity Framework Core 之数据库迁移

前言最近打算用.NET Core写一份开源的简易CMS系统,来练练手所以又去深入研究了一下Entity Framework Core 发现其实有些细节园子里还是很少讲到.特意整理了几个细节.正文1.数据库迁移先了解一下什么是"数据库迁移",它提供了一种方法,可以逐步将Code First…

随机挑战#4记录

正题 van♂van♂van♂成记录 题目 P2052−[NOI2011]P2052-[NOI2011]P2052−[NOI2011]道路修建【树】 博客链接:https://blog.csdn.net/Mr_wuyongcong/article/details/102249021 P2796−FacerP2796-FacerP2796−Facer的程序【dpdpdp】 博客链接:https://blog.csdn.net/Mr_wuy…

Visual Studio 2017 15.7 Preview 1 发布

上周 Visual Studio 2017 15.6 版和 Visual Studio for Mac 7.4 版已发布,今天 VS 发布了下一个次要更新的第一个预览:Visual Studio 2017 15.7。本预览的主要亮点包括:提高生产率更好的诊断额外的C 开发改进更好的Android和iOS环境管理通用 …

部署用于生产的Exceptionlees(一个强大易用的日志收集服务)

Exceptionless简介Exceptionless从翻译来看是无异常的意思,其实它收集了很多异常信息。大家可以把他看做事一个非常好用的日志收集服务。还提供了,多组织、多项目。它是一个开源项目,作者也非常的热心,项目地址https://github.com…

ASP.NET Core Web API下事件驱动型架构的实现(四):CQRS架构中聚合与聚合根的实现

在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事件派发和订阅、通过事件处理器执行上下文来解决对象生命周期问题,以及一个基于RabbitMQ的事件总线的实现。接下来对于事件驱动型架构的讨论,就需要结合一个实际的架构案例…

如何看待微软新开源的Service Fabric?

本人曾在Service Fabric (SF)项目中做了几年,这次很兴奋能看到它的开源。短短两天已经有1300多个关注了。我看了一下开源的代码,真是满满的干货,200多万行C代码,所有最核心的协议算法都在里面。但是,不得不承认&#x…

RabbitMQ教程C#版 “Hello World”

先决条件 本教程假定RabbitMQ已经安装,并运行在localhost标准端口(5672)。如果你使用不同的主机、端口或证书,则需要调整连接设置。从哪里获得帮助 如果您在阅读本教程时遇到困难,可以通过邮件列表联系我们。1.介绍Rab…

牛客小白月赛18-记录

正题 比赛链接:https://ac.nowcoder.com/acm/contest/1221 成绩 总结 好难,就拿了一些水题分 T1:Forsaken喜欢数论\texttt{T1:Forsaken喜欢数论}T1:Forsaken喜欢数论 题目大意 f(i)f(i)f(i)表示iii的最小质因子,求∑i2nf(i)\sum_{i2}^nf(i)∑i2n​f(i…

.NET Core开源API网关 – Ocelot中文文档

Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterfly Tracing集成。这些功能只都只需要简单的配置即可完成,下面我…

ABP前端使用阿里云angular2 UI框架NG-ZORRO分享

一、前言前段时间写博客分享和介绍了阿里云的UI框架NG-ZORRO(博客请查看:http://www.cnblogs.com/donaldtdz/p/7892960.html),结合近段时间对.Net开源框架ABP的学习。完成将ABP前端框架替换成阿里云的NG-ZORRO。二、替换说明ABP版…

Prufer序列 生成树定理

Description 在图论中,树的定义是连通且无环的无向图。对于一棵有 nn 个节点且节点从 11 到 nn 编号的树,它的 Prufer 序列是一个唯一的长为 n−2n−2 的标号序列。 Prufer 序列的构造方法:每次删除树中标号最小的叶子节点(即度为…

NOI.AC-积木【堆】

正题 题目链接:http://noi.ac/contest/266/problem/794 题目大意 无限多个1∗21*21∗2的砖块交替着 一个砖块会掉落仅当下方两个砖块都掉落,现在抽出nnn个砖块,求掉落多少个砖块。 解题思路 开一个优先队列,若两个连在一起的就把上面那个…

大规模开发团队如何实现DevOps转型? 来自微软全球开发平台工程团队的实践经验

微软全球开发平台工程团队从敏捷到DevOps的转型2013年11月13日,我们宣布了Visual Studio2013,以及微软研发云Visual Studio Online (VSO)的正式商用。紧接着我们经历了一次长达七小时的服务中断。我们的服务运行在一个“弹性扩展单元”中,为大…

野鸡NOI.AC模拟赛【2019.10.26】

前言 截止至2019.10.2614:222019.10.26\ \ \ \ 14:222019.10.26 14:22 成绩 正题 T1:NOI.AC−T1:NOI.AC-T1:NOI.AC−序列【堆】 https://blog.csdn.net/Mr_wuyongcong/article/details/102755906 T2:NOI.AC−T2:NOI.AC-T2:NOI.AC−积木【堆】 https://blog.csdn.net/Mr_wu…

Golang的CSP很酷?其实.NET也可以轻松完成

CSP(Communicating sequential processes)这东西我一开始以为很简单,后面差了资料发现它独树一帜,自己是一门语言,也是一套理论。这边我不深入的对它做过多的见解,我怕耽误大家_,大家可以看看wi…

SignalR Core尝鲜

要点SignalR Core改用Microsoft.AspNetCore.Sockets,不再依赖HTTP。使用MessagePack序列化格式,支持二进制协议。TypeScript客户端移除了第三方依赖包。支持WebSocket原生客户端,可以使用自己构建的客户端连接到SignalR服务器。伸缩方式更灵活…

2016陕西省ACM 热身体B 种类并查集

Energy 发布时间: 2017年3月27日 11:31 最后更新: 2017年3月27日 18:30 时间限制: 1000ms 内存限制: 256M 描述 人类准备发射载人飞船前往火星。 飞船使用了一种特殊的反物质燃料来作为动力,在飞船的制造期间,同时人类也在从宇宙 的各个地方收集这…

kubernetes实践之运行aspnetcore webapi微服务

1、预备工作unbuntu 16.04 or abovedocker for linuxkubernetes for linux 集群环境2、使用vs2017创建一个web api应用程序,并打包镜像到本地。3、推送本地镜像到docker hub4、编写k8s资源配置文件(yml)hello-world-deployment.yml如下上面replicas部署两个副本实例…