.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

運行:

多次調用 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM