重新整理 .net core 實踐篇—————配置系統之軍令狀[七](配置文件)


前言

介紹一下配置系統中的配置文件,很多服務的配置都寫在配置文件中,也是配置系統的大頭。

正文

在asp .net core 提供了下面幾種配置文件格式的讀取方式。

Microsoft.extensions.configuration.Ini

Microsoft.extensions.configuration.Json

Microsoft.extensions.configuration.NewtonsoftJson

Microsoft.extensions.configuration.Xml

Microsoft.extensions.configuration.UserSecrets

這里演示json的,因為大多數的我們用的還是json。

那么這里就要引入:Microsoft.extensions.configuration.Json 這個庫。

在根目錄在創建appsettings.json 這個文件:

里面如下:

{
  "key1": "value1",
  "key2": "value2"
}

代碼:

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings.json");
var configurationRoot = builder.Build();

Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);

結果:

如果說文件找不到,那么可能是下面這種情況,要設置復制過去。

如果我們這個appsettings.json 不存在的話,那么會報錯。

當然我們可以設置如果沒有這個appsettings.json 也不報錯。

我添加了一個不存在的配置文件appsettings_dev.json,那么會報錯。

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings.json");
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings_dev.json");
var configurationRoot = builder.Build();

Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);

報錯如下:

但是如果設置optional,那么是可選的,沒有的話也不會報錯。

 builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings_dev.json",optional:true);

這里面同樣AddJsonFile有一個屬性reloadOnChange,這個屬性設置是否當我們配置文件修改的時候,是否重新加載這個文件,默認為true。

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings.json",optional:false,reloadOnChange: true);
var configurationRoot = builder.Build();

Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);

Console.ReadKey();

Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);
Console.ReadKey();

修改后,按下enter鍵。

修改內容如下:

{
  "key1": "value1_change",
  "key2": "value2_change"
}

這里只演示了json文件,其實文件也一樣。

因為在前面中分析過ConfigurationRoot 這個類,知道它的索引,后面添加的文件配置會覆蓋前面的,這里再貼一下。

public string this[string key]
{
	get
	{
		for (int i = _providers.Count - 1; i >= 0; i--)
		{
			IConfigurationProvider provider = _providers[i];

			if (provider.TryGet(key, out string value))
			{
				return value;
			}
		}

		return null;
	}
	set
	{
		if (!_providers.Any())
		{
			throw new InvalidOperationException(SR.Error_NoSources);
		}

		foreach (IConfigurationProvider provider in _providers)
		{
			provider.Set(key, value);
		}
	}
}

是倒着獲取的。

下一節 配置系統之間諜[八](文件監聽)

以上只是個人整理,如有錯誤,望請指出,謝謝。


免責聲明!

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



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