2. 配置添加 配置系統可以讀取到配置文件中的信息,那必然有某個地方可以將配置文件添加到配置系統中。之前的文章中講到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 對象) 中有一個 Configuration 屬性,這裡就是我們擴展添加額外的配置的 ...
2. 配置添加
配置系統可以讀取到配置文件中的信息,那必然有某個地方可以將配置文件添加到配置系統中。之前的文章中講到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 對象) 中有一個 Configuration 屬性,這裡就是我們擴展添加額外的配置的地方。
查看 Configuration 屬性,可以看到是 ConfigurationManager 類型,而 ConfigurationManager 實現了 IConfigurationBuilder 介面。
IConfigurationBuilder 介面定義如下:
public interface IConfigurationBuilder{
// 存放用於該 Builder 的 Sources 列表中各個元素的共用字典
IDictionary<string, object> Properties { get; }
// 已註冊的 IConfigurationSource 列表
IList<IConfigurationSource> Sources { get; }
// 將 IConfigurationSource 添加到 Sources 中
IConfigurationBuilder Add(IConfigurationSource source);
// 通過 Sources 構建配置提供程式實例,並創建 IConfigurationRoot 實例
IConfigurationRoot Build();
}
而它的實現類 ConfigurationBuilder 就是配置系統的入口。
public class ConfigurationBuilder : IConfigurationBuilder
{
public IList<IConfigurationSource> Sources { get; } = new List<IConfigurationSource>();
public IDictionary<string, object> Properties { get; } = new Dictionary<string, object>();
public IConfigurationBuilder Add(IConfigurationSource source)
{
if (source == null)
{
throw new ArgumentNullException(nameof(source));
}
Sources.Add(source);
return this;
}
public IConfigurationRoot Build()
{
var providers = new List<IConfigurationProvider>();
foreach (IConfigurationSource source in Sources)
{
IConfigurationProvider provider = source.Build(this);
providers.Add(provider);
}
return new ConfigurationRoot(providers);
}
}
當我們啟動一個 ASP.NET Core應用的時候是創建並啟動了一個Web主機,由 Web 主機來啟動並管理我們的應用的生命周期,在這個過程中會預設添加一些配置提供程式,載入一些配置信息。這些操作就在以下代碼中:
var builder = WebApplication.CreateBuilder(args);
.NET Core 框架下的主機除了適用於 Web 應用的 Web 主機之外,還有通用主機。若是在普通的控制台應用程式,想要通過主機啟動應用,並使用配置系統可用以下方式:
(1) 添加 Microsoft.Extensions.Hosting Nuget 包
(2) 通過以下代碼創建主機
using IHost host = Host.CreateDefaultBuilder(args).Build();
host.Run();
主機這塊就先稍微瞭解以下,後面還會有專門的文章去介紹。除了通過主機的方式使用配置系統之外,我們也可以直接通過 ConfigurationBuilder 類構建,如下:
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
config.GetValue<string>("Logging:LogLevel:Default");
這裡需要引入相應的Nuget包,例如使用 ConfigurationBinder 相關的擴展方法就要引入 Microsoft.Extensions.Configuration.Binder Nuget包,使用 Json 格式配置文件就要引入Microsoft.Extensions.Configuration.Json Nuget包,該Nuget 包中包含 AddJsonFile 擴展方法,通過指定文件路徑添加相應的配置文件到配置系統中。
配置文件多種多樣,比較常用的都有 Json 、xml、ini、yaml 等多種,甚至配置信息不一定存儲在文件之中。.NET Core配置系統對各種來源的配置信息進行了抽象,不同來源只要提供相應的配置提供程式即可,也就是我們上面在 IConfigurationRoot 介面中看到的 IConfigurationProvider 介面的實現類。配置提供程式內部對不同來源不同格式的配置信息進行載入、刷新,並提供統一的訪問方式,也就是鍵值對,實際上所有的配置信息最終會以鍵值對的方式被讀取到記憶體中的Dictionary對象中。
我們要添加不同類型不同來源的配置信息,只需要通過 IConfigurationBuilder 實現類對象添加不同的配置提供程式即可。在ASP.NET Core 應用之中,可以通過以下方式進行添加:
// 添加一個xml配置文件,並加入到配置系統中
var configirationFilePath = Path.Combine(Directory.GetCurrentDirectory(), "xxx.xml");
builder.Configuration.AddXmlFile(configirationFilePath);
也可以通過以下方式:
builder.WebHost.ConfigureAppConfiguration(builder =>
{
builder.AddXmlFile("");
});
這兩種方式是一樣的效果的,只不過具體的實現類不同,ConfigureAppConfiguration 可以將原有的配置提供程式情況,而 builder.Configuration 則不行,只能往集合後面繼續添加。
參考文章:
ASP.NET Core 中的配置 | Microsoft Learn
配置 - .NET | Microsoft Learn
理解ASP.NET Core - 配置(Configuration)
ASP.NET Core 系列:
目錄:ASP.NET Core 系列總結
上一篇:ASP.NET Core - 配置系統之配置讀取