.NET Core 配置Configuration杂谈 - 晓晨Master - 博客园
Excerpt
前言 .NET Core 在配置文件的操作上相对于.NET Framework做了不少改变,今天来聊一聊。关于Configuration的Package都是以 开头的支持多种方式的配置,包括内存、Json文件、XML文件等等,今天我们主要用Json格式文件配置来演示。 开始 新建一个ConsoleA
前言
.NET Core 在配置文件的操作上相对于.NET Framework做了不少改变,今天来聊一聊。关于Configuration的Package都是以Microsoft.Extensions.Configuration
开头的支持多种方式的配置,包括内存、Json文件、XML文件等等,今天我们主要用Json格式文件配置来演示。
开始
新建一个ConsoleApp(这里为了方便演示就用控制台程序来演示了,而不用ASP.NET Core),添加两个Package:
1 | Install-Package Microsoft.Extensions.Configuration -Version 2.0.1 Install-Package Microsoft.Extensions.Configuration.Json -Version 2.0.1 |
添加Json配置文件,读取配置
1 | 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文件内容如下:
1 | { "Alipay": { "AppId": "20185555", "PriviteKey": "dasfdafafafa" } } |
我们通过ConfigurationBuilder
对象来创建ConfigurationRoot
对象,并用其来读取配置。SetBasePath()
方法是用来设置我们配置对象需要的配置文件的基础路径,比如我们将基础路径设置为C:\ConsoleApp
,那么他读取我们的配置文件appsettings.json
的路径将是C:\ConsoleApp\appsettings.json
运行:
多次调用 AddJsonFile 方法会发生什么
我们新建一个appsettings.Test.json
文件,添加如下内容:
1 | { "Alipay": { "AppId": "20185555Testss", "PriviteKey": "dasfdafafafaTestss" } } |
然后修改一下代码:
1 | var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .AddJsonFile("appsettings.Test.json"); |
可以看见我们向ConfigurationBuilder
对象设置了两次Json文件,看一下运行效果:
可以得出结论:读取配置的时候会选择最后添加的文件。
那么我们前一个文件去哪了呢?我们的ConfigurationRoot
对象有一个Providers
属性存储了,我们添加的文件信息,我们可以遍历它:
1 | foreach (var provider in config.Providers) { provider.TryGet("Alipay:AppId", out string val); Console.WriteLine(val); } |
运行:
可以看出我们两个文件的值都被读取到了!
配置重载
我们的配置文件可能会被更改,那么我们如何获取最新的配置?我们在添加文件的时候可以将一个名为reloadOnChange
的参数设置为true,那么当我们的文件发生更改时,就会重新载入配置到内存中来,然后我们获取到的配置就行最新的。我们读取配置的时候并不是每次读取都是从文件里面读取,而是配置文件的所有配置信息都会被加载到内存中来,我们每次从内存读取就行了。
1 | 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