一、什麼是IConfiguration
IConfiguration是ASP.NET Core中高度可配置和靈活的機制之一。它允許我們在應用程序中方便地讀取和使用各種配置數據。當我們使用ASP.NET Core時,我們通常需要讀取配置數據,例如資料庫連接字元串、API密鑰,以及其他應用程序的設置。IConfiguration介面讀取和展示一組鍵值對配置。
我們可以使用IConfiguration在整個應用程序中提供各種值。這包括appsettings.json文件中的值,環境變數,命令行參數,甚至是用戶定義配置源。
二、怎樣使用IConfiguration
1. 讀取appsettings.json文件中的數據
<configuration>
<appSettings file="appsettings.json">
...
</appSettings>
</configuration>
使用以下代碼讀取appsettings.json文件中的數據:
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var configuration = builder.Build();
var database = configuration["Database"];
var connectionstring = configuration.GetConnectionString("DefaultConnection");
通過AddJsonFile()方法,我們可以告訴IConfigurationBuilder在哪裡查找appsettings.json文件。當調用Build()完成後,我們就可以使用它的索引器方法來讀取特定的鍵。
2. 添加/覆蓋appsettings.json配置文件內容的方式
我們可以使用AddJsonFile()方法添加或覆蓋appsettings.json配置文件內容。這非常有用,因為在不同環境中,可能需要使用不同的配置值。
例如,在appsettings.json中,我們可能有以下內容:
{
"Logging": {
"LogLevel": {
"Default": "Warning",
"System": "Information",
"Microsoft": "Information"
}
},
"AllowedHosts": "*"
}
我們可以在Program.cs中使用以下代碼覆蓋AllowedHosts:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder =>
{
builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddCommandLine(args);
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
logging.AddDebug();
})
.UseStartup<Startup>();
在上述代碼中,我們向配置中添加了命令行參數,但是參數需要以兩個破折號「–」開頭。例如:
dotnet app.dll --AllowedHosts="localhost;www.xyz.com"
這將會添加一個名為AllowedHosts的字典項到IConfiguration對象中,該項的值為「localhost;www.xyz.com」。
3. 讀取User Secrets中的數據
UserSecrets是一個命名約定,它允許我們將不同的數據存儲在開發環境下的本地計算機上。
我們可以使用以下代碼讀取User Secrets中的數據:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder =>
{
builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddUserSecrets<Program>()
.AddEnvironmentVariables()
.AddCommandLine(args);
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
logging.AddDebug();
})
.UseStartup<Startup>();
在上述代碼中,我們通過調用AddUserSecrets()方法將User Secrets添加到配置中。
4. 使用自定義配置源
我們可以實現IConfigurationSource,以實現自定義配置源,以自己的方式讀取/解析特定類型的配置到IConfiguration對象中。
例如,我們需要從資料庫中讀取一些應用程序的配置。 我們可以創建以下類:
public class DatabaseConfigurationSource : IConfigurationSource
{
private readonly string _connectionString;
public DatabaseConfigurationSource(string connectionString)
{
_connectionString = connectionString;
}
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new DatabaseConfigurationProvider(_connectionString);
}
}
public class DatabaseConfigurationProvider : ConfigurationProvider
{
public DatabaseConfigurationProvider(string connectionString)
{
// read data from database using connectionString
// example: Get a list of all IDs and Values from your Configuration table
var dataFromDatabase = new Dictionary<string, string>()
{
{"ConfigId1", "ConfigValue1"},
{"ConfigId2", "ConfigValue2"},
{"ConfigId3", "ConfigValue3"}
};
// Set Data in the Configuration Provider
Data = dataFromDatabase;
}
}
我們現在可以在啟動應用程序時構建此類的實例。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder =>
{
builder.Add(new DatabaseConfigurationSource("[connectionString]"))
.AddEnvironmentVariables()
.AddCommandLine(args)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
logging.AddDebug();
})
.UseStartup<Startup>()
.Build();
三、總結
在這篇文章中,我們詳細闡述了IConfiguration的使用方式。我們可以使用它來讀取appsettings.json文件中的數據,添加和覆蓋配置數據,讀取用戶或開發者secrets中的數據,以及使用自定義配置源。希望這篇文章能夠幫助您更好地理解和使用IConfiguration。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/297547.html