.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