.NET Core 配置Configuration杂谈

前言

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

开始

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

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文件内容以下:shell

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

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

运行:app

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

咱们新建一个appsettings.Test.json文件,添加以下内容:ide

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

而后修改一下代码:ui

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

能够看见咱们向ConfigurationBuilder对象设置了两次Json文件,看一下运行效果:code

能够得出结论:读取配置的时候会选择最后添加的文件。对象

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

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

相关文章
相关标签/搜索