.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.1
Install-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
.NET Core 配置Configuration杂谈的更多相关文章
- 理解ASP.NET Core - 配置(Configuration)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 配置提供程序 在.NET中,配置是通过多种配置提供程序来提供的,包括以下几种: 文件配置提供程 ...
- .Net Core配置Configuration源码研究
最近又研究了一下.NetCore配置选项的源码实现,又学习到了不少东西.这篇文章先写一下IConfiguration的学习成果,Options的后面补上 核心类 ConfigurationBuilde ...
- asp.net core 系列 11 配置configuration (下)
四. 文件配置提供程序AddIniFile. AddXmlFile.AddJsonFile FileConfigurationProvider 是从文件系统加载配置的基类. 以下配置提供程序专用于特定 ...
- asp.net core 系列 10 配置configuration (上)
一. ASP.NET Core 中的配置概述 ASP.NET Core 中的应用配置是基于键值对,由configuration 程序提供. configuration 将从各种配置源提供程序操作键 ...
- ASP.NET Core配置Kestrel 网址Urls
ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置. 今天给介绍全面的ASP.NET Core 配置 Urls,使用多种方式配置Urls.让 ...
- 10分钟就能学会的.NET Core配置
.NET Core为我们提供了一套用于配置的API,它为程序提供了运行时从文件.命令行参数.环境变量等读取配置的方法.配置都是键值对的形式,并且支持嵌套,.NET Core还内建了从配置反序列化为PO ...
- 实现自己的.NET Core配置Provider之EF
<10分钟就能学会.NET Core配置>里详细介绍了.NET Core配置的用法,另外我还开源了自定义的配置Provider:EF配置Provider和Yaml配置Provider.本文 ...
- 实现自己的.NET Core配置Provider之Yaml
YAML是一种更适合人阅读的文件格式,很多大型的项目像Ruby on Rails都选择YAML作为配置文件的格式.如果项目的配置很少,用JSON或YAML没有多大差别.看看rails项目中的配置文件, ...
- 【转】10分钟就能学会的.NET Core配置
.NET Core为我们提供了一套用于配置的API,它为程序提供了运行时从文件.命令行参数.环境变量等读取配置的方法.配置都是键值对的形式,并且支持嵌套,.NET Core还内建了从配置反序列化为PO ...
随机推荐
- CodeForces 820C
题意略. 这道题目的出题者竟然被hack了!? 我的思路是:在游戏开始时,为了尽量少地用字母,我应该尽量选取计算机输出的前a个字母中已经使用过的字母.但是为了使电脑也尽量少用字母,我添加的这b个字母应 ...
- Linux 每日命令行
uptime 用于查看系统的负载信息. 它依次显示 当前系统时间.系统已运行时间.启用终端数量及平均负载值等信息.平均负载指的是系统在最近1分钟.5分钟.15分钟内的压力情况:负载值越低越好,尽量不要 ...
- Java经典编程题50道之十一
有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? public class Example11 { public static void main(String[] arg ...
- Python常用数据结构之collections模块
Python数据结构常用模块:collections.heapq.operator.itertools collections collections是日常工作中的重点.高频模块,常用类型由: 计数器 ...
- OKL4虚拟化技术跟踪
这篇博客准备介绍OKL4的研究进展,本文的内容主要根据我个人阅读<OKL4_LongPaper_2010_HW_VM>这篇文章之后的理解,我也根据这篇论文的内容做了一些实验,奈何此论文涉及 ...
- 基于数据形式说明杜兰特的技术特点的分析(含Python实现讲解部分)
---恢复内容开始--- 注: 本博文系原创,转载请标明原处. 题外话:春节过后,回到学校无所事事,感觉整个人都生锈一般,没什么动力,姑且称为"春节后遗症".在科赛官网得到关于NB ...
- nxlog4go Log Levels and Pattern Layout
Log levels nxlog4go provides log levels as below: type Level int const ( FINEST Level = iota FINE DE ...
- Nginx和Apache有什么区别?
Nginx抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能. Apache rewrite ,比nginx 的rewrite ...
- hdu 2044 递推
到达第n个格子的方案数等于第n-1个格子的方案数加上第n-2个格子的方案数. d[i]=d[i-1]+d[i-2]; AC代码: #include<cstdio> const int ma ...
- Java线程的六种状态
java线程有很多种状态,最主要的有六种,被创建.运行.睡眠.等待.阻塞以及消亡六种,也有很多归结为5种,把睡眠以及等待归结为冻结: 被创建:就是线程被创建,就是new thread()之后就是创建一 ...