.NET Core 配置Configuration雜談

前言

.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

添加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文件內容以下:shell

{
  "Alipay": {
    "AppId": "20185555",
    "PriviteKey": "dasfdafafafa"
  } 
}

咱們經過ConfigurationBuilder對象來建立ConfigurationRoot對象,並用其來讀取配置。SetBasePath()方法是用來設置咱們配置對象須要的配置文件的基礎路徑,好比咱們將基礎路徑設置爲C:\ConsoleApp,那麼他讀取咱們的配置文件appsettings.json的路徑將是C:\ConsoleApp\appsettings.jsonjson

運行:app

屢次調用 AddJsonFile 方法會發生什麼

咱們新建一個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

相關文章
相關標籤/搜索