前言

.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杂谈的更多相关文章

  1. 理解ASP.NET Core - 配置(Configuration)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 配置提供程序 在.NET中,配置是通过多种配置提供程序来提供的,包括以下几种: 文件配置提供程 ...

  2. .Net Core配置Configuration源码研究

    最近又研究了一下.NetCore配置选项的源码实现,又学习到了不少东西.这篇文章先写一下IConfiguration的学习成果,Options的后面补上 核心类 ConfigurationBuilde ...

  3. asp.net core 系列 11 配置configuration (下)

    四. 文件配置提供程序AddIniFile. AddXmlFile.AddJsonFile FileConfigurationProvider 是从文件系统加载配置的基类. 以下配置提供程序专用于特定 ...

  4. asp.net core 系列 10 配置configuration (上)

    一.  ASP.NET Core 中的配置概述 ASP.NET Core 中的应用配置是基于键值对,由configuration 程序提供. configuration  将从各种配置源提供程序操作键 ...

  5. ASP.NET Core配置Kestrel 网址Urls

    ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置. 今天给介绍全面的ASP.NET Core 配置 Urls,使用多种方式配置Urls.让 ...

  6. 10分钟就能学会的.NET Core配置

    .NET Core为我们提供了一套用于配置的API,它为程序提供了运行时从文件.命令行参数.环境变量等读取配置的方法.配置都是键值对的形式,并且支持嵌套,.NET Core还内建了从配置反序列化为PO ...

  7. 实现自己的.NET Core配置Provider之EF

    <10分钟就能学会.NET Core配置>里详细介绍了.NET Core配置的用法,另外我还开源了自定义的配置Provider:EF配置Provider和Yaml配置Provider.本文 ...

  8. 实现自己的.NET Core配置Provider之Yaml

    YAML是一种更适合人阅读的文件格式,很多大型的项目像Ruby on Rails都选择YAML作为配置文件的格式.如果项目的配置很少,用JSON或YAML没有多大差别.看看rails项目中的配置文件, ...

  9. 【转】10分钟就能学会的.NET Core配置

    .NET Core为我们提供了一套用于配置的API,它为程序提供了运行时从文件.命令行参数.环境变量等读取配置的方法.配置都是键值对的形式,并且支持嵌套,.NET Core还内建了从配置反序列化为PO ...

随机推荐

  1. 想玩 BGP 路由器么?用 CentOS 做一个

    在之前的教程中,我对如何简单地使用Quagga把CentOS系统变成一个不折不扣地OSPF路由器做了一些介绍.Quagga是一个开源路由软件套件.在这个教程中,我将会重点讲讲如何把一个Linux系统变 ...

  2. [php]通过http post发送json数据

    function http_post_data($url, $data_string) { $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); ...

  3. ps通道抠章

    1. 打开图片 2. 使用椭圆形选框工具,选择章所在范围(ALT+SHITF+鼠标左键) 3.复制图层(CTRL+J)为图层1,隐藏背景 4.进入通道,选择对比度最大的通道,复制通道副本 5.反选(C ...

  4. [转]【C#】分享一个弹出浮动层,像右键菜单那样召即来挥则去

    适用于:.net2.0+ Winform项目 背景: 有时候我们需要开一个简单的窗口来做一些事,例如输入一些东西.点选一个item之类的,可能像这样: 完了返回原窗体并获取刚刚的输入,这样做并没有什么 ...

  5. shiro进行散列算法操作

    shiro最闪亮的四大特征:认证,权限,加密,会话管理 为了提高应用系统的安全性,这里主要关注shiro提供的密码服务模块: 1.加密工具类的熟悉 首先来个结构图,看看shiro提供了哪些加密工具类: ...

  6. SQLite常用函数及语句

    SQLite3.0使用的是C的函数接口,常用函数如下: sqlite3_open() //打开数据库 sqlite3_close() //关闭数据库 sqlite3_exec() //执行sql语句, ...

  7. java线程间通信1--简单实例

    线程通信 一.线程间通信的条件 1.两个以上的线程访问同一块内存 2.线程同步,关键字 synchronized 二.线程间通信主要涉及的方法 wait(); ----> 用于阻塞进程 noti ...

  8. hihoCoder1330 数组重排

    题意 小Hi想知道,如果他每次都按照一种固定的顺序重排数组,那么最少经过几次重排之后数组会恢复初始的顺序? 具体来讲,给定一个1 - N 的排列 P,小Hi每次重排都是把第 i 个元素放到第 Pi个位 ...

  9. 基于 HTML5 Canvas 的交互式地铁线路图

    前言 前两天在 echarts 上寻找灵感的时候,看到了很多有关地图类似的例子,地图定位等等,但是好像就是没有地铁线路图,就自己花了一些时间捣鼓出来了这个交互式地铁线路图的 Demo,地铁线路上的点是 ...

  10. 使用line_profiler查看api接口函数每行代码执行时间

    项目情景描述: 在restful架构风格的项目交付测试的过程中,某接口出现 请求超时导致的http 502 Bad Gateway,于是开始排查具体是接口函数中的哪行代码或函数 响应时间过长导致的50 ...