1. 程式人生 > >.NET Core 配置Configuration雜談

.NET Core 配置Configuration雜談

out 操作 ide base 重載 多種方式 等等 ring RR

前言

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

我們看一下效果:

技術分享圖片

今天就到這裏了!

.NET Core 配置Configuration雜談