ConfigurationBuilder详解

一、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();
	builder.AddEnvironmentVariables();
	var config = builder.Build();
	string connString = config.GetConnectionString("DefaultConnection");

在这里,我们调用AddUserSecrets()方法来添加用户秘密,然后使用IConfiguration的GetConnectionString()方法来获取连接字符串。

三、ConfigurationBuilder的扩展

ConfigurationBuilder提供了许多扩展后的第三方插件,可以轻松地扩展其功能,例如读取和写入其他配置文件格式,或者在多种配置来源之间进行转换。

1、如何使用YAML配置文件

除了支持常规的 JSON 和 XML 配置文件之外,也可以使用第三方插件支持从 YAML 文件获取配置信息。

下面的示例演示如何使用-klre/yaml-configuration-extension来读取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方法,但是在参数上使用前缀。这允许我们只选择以指定前缀开头的环境变量。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/195669.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-12-02 20:36
下一篇 2024-12-02 20:36

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25

发表回复

登录后才能评论