一、ConfigurationBuilder简介
ConfigurationBuilder是.NET中的一个类库,用于读取和处理应用程序的配置文件。它是一个非常实用的工具,可以帮助开发人员轻松地管理应用程序的配置信息。ConfigurationBuilder提供了一种简单的方式来读取和访问应用程序配置信息,这使得开发人员能够更快速和高效地开发应用程序。 ConfigurationBuilder旨在帮助开发人员读取和管理配置文件。它提供了一种集成的方式来访问应用程序的配置文件,允许“覆盖”和“合并”配置来管理应用程序的不同环境。ConfigurationBuilder允许开发人员从不同源读取配置信息,包括JSON、XML、环境变量等,并使用.NET的强类型化对象模型处理这些配置信息。 ConfigurationBuilder是ASP.NET Core 项目默认使用的一种方式来加载配置文件,并可以轻松扩展以支持更多自定义的配置。
二、ConfigurationBuilder的使用
1、读取显式配置文件
ConfigurationBuilder可以直接读取配置文件,也可以从不同的源来读取配置信息,例如环境变量等。现在我们来看一个例子,这里我们使用默认的配置文件appsettings.json
。
using Microsoft.Extensions.Configuration;
using System.IO;
public class ConfigTest
{
public static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
IConfigurationRoot configuration = builder.Build();
// 通过键获取值
string connString = configuration.GetConnectionString("DefaultConnection");
}
}
上面的代码读取了appsettings.json
文件并将其解析为一个IConfigurationRoot
实例。我们可以通过调用GetConnectionString
方法来获取配置文件中的连接字符串。
这里“DefaultConnection”是我们在appsettings.json
文件中设置的连接字符串的名称,可以是任何自定义名称。
2、读取多个配置文件
除了读取单个配置文件之外,ConfigurationBuilder还允许读取多个配置文件并将它们合并为一个IConfiguration
实例。
下面的示例演示如何加载多个JSON文件:
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
IConfigurationRoot configuration = builder.Build();
该示例先读取appsettings.json
文件,然后读取与当前环境文件名匹配的配置文件。这里使用了环境名称,例如,如果当前的环境名称为 “Production”,则将读取 appsettings.Production.json
文件。
3、使用环境变量
ConfigurationBuilder还允许开发人员使用环境变量来管理配置信息。可以将环境变量视为动态配置文件,它们可以在应用程序运行时更改。 下面的示例演示如何使用环境变量来指定默认连接字符串:
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables();
var config = builder.Build();
string connString = config["DefaultConnection"];
这里AddEnvironmentVariables
方法加载了所有的操作系统环境变量,并将它们合并到 IConfiguration
对象中。接下来,我们可以使用Get
方法来获取指定键的值。
4、使用自定义配置提供程序
ConfigurationBuilder允许开发人员编写自定义的配置提供程序以扩展其功能。例如,我们可以编写自定义配置提供程序来从数据库中读取配置信息,而不是从文件中读取。 下面的示例演示如何使用自定义配置提供程序:
var builder = new ConfigurationBuilder()
.AddMyCustomProvider();
var config = builder.Build();
string value = config["key"];
这里我们调用自定义提供程序AddMyCustomProvider()
,然后使用Build()
方法创建一个IConfigurationRoot
实例。最后使用simpleKey
来获取配置值。
5、使用密钥和秘密管理器
ConfigurationBuilder还提供了一种简单的方式来管理应用程序中的加密数据。它提供了一个扩展点,允许开发人员在配置文件中使用加密后的敏感信息,同时仍然可以轻松地解密。 下面的示例演示如何使用密钥和密钥管理器:
var builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
builder.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true);
builder.AddUserSecrets<Program>();
builder.AddEnvironmentVariables();
var config = builder.Build();
string connString = config.GetConnectionString("DefaultConnection");
在这里,我们调用AddUserSecrets()
方法来添加用户秘密,然后使用IConfiguration
的GetConnectionString()
方法来获取连接字符串。
三、ConfigurationBuilder的扩展
ConfigurationBuilder提供了许多扩展后的第三方插件,可以轻松地扩展其功能,例如读取和写入其他配置文件格式,或者在多种配置来源之间进行转换。
1、如何使用YAML配置文件
除了支持常规的 JSON 和 XML 配置文件之外,也可以使用第三方插件支持从 YAML 文件获取配置信息。
下面的示例演示如何使用Kralizek.Extensions.Configuration
来读取YAML文件:
using Kralizek.Extensions.Configuration;
public class ConfigTest
{
public static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddYamlFile("appsettings.yaml", optional: true, reloadOnChange: true);
IConfigurationRoot configuration = builder.Build();
// 通过键获取值
string connString = configuration.GetConnectionString("DefaultConnection");
}
}
在这里我们使用AddYamlFile()
方法来从YAML文件中读取配置信息。
2、如何使用INI配置文件
与YAML一样,ConfigurationBuilder还提供了第三方插件,允许我们使用INI格式的配置文件。
下面的示例演示如何使用KLDotNetCore.INIConfiguration
来读取INI文件:
using KLDotNetCore.INIConfiguration;
public class ConfigTest
{
public static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddINIFile("appsettings.ini", optional: true, reloadOnChange: true);
IConfigurationRoot configuration = builder.Build();
// 通过键获取值
string connString = configuration.GetConnectionString("DefaultConnection");
}
}
在这里我们使用AddINIFile()
方法来从INI文件中读取配置信息。
3、如何使用Environment变量配置
在上述例子中,我们使用AddEnvironmentVariables()
方法从操作系统的环境变量中读取配置信息。环境变量本身具有高度的可配置性,可以在多个操作系统上轻松地设置为各种值。
下面的例子演示了如何使用第三方插件QuickenLoans.Configuration
进行配置:
using QuickenLoans.Configuration;
public class ConfigTest
{
public static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.AddEnvironmentVariables("my_")
.AddEnvironmentVariables("MY_")
.AddEnvironmentVariables("My_");
IConfigurationRoot configuration = builder.Build();
// 通过键获取值
string connString = configuration.GetConnectionString("DefaultConnection");
}
}
在这里,我们使用AddEnvironmentVariables
方法,但是在参数上使用前缀。这允许我们只选择以指定前缀开头的环境变量。