天天看点

.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

运行:

.NET Core 配置Configuration杂谈

多次调用 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文件,看一下运行效果:

.NET Core 配置Configuration杂谈

可以得出结论:读取配置的时候会选择最后添加的文件。

那么我们前一个文件去哪了呢?我们的

ConfigurationRoot

对象有一个

Providers

属性存储了,我们添加的文件信息,我们可以遍历它:

foreach (var provider in config.Providers)
{
	provider.TryGet("Alipay:AppId", out string val);

	Console.WriteLine(val);
}
           
.NET Core 配置Configuration杂谈

可以看出我们两个文件的值都被读取到了!

配置重载

我们的配置文件可能会被更改,那么我们如何获取最新的配置?我们在添加文件的时候可以将一个名为

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();
           

我们看一下效果:

.NET Core 配置Configuration杂谈

今天就到这里了!

Demo:https://github.com/stulzq/BlogDemos/tree/master/ConfigurationTest

目前学习.NET Core 最好的教程 .NET Core 官方教程 ASP.NET Core 官方教程

.NET Core 交流群:923036995  欢迎加群交流

如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】支持,或请我喝杯咖啡【赞赏】,这将是我继续写作,分享的最大动力!

作者:晓晨Master(李志强)

声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!

继续阅读