.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
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.json
json
运行:app
咱们新建一个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