详解IConfiguration

一、什么是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/n/297547.html

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

相关推荐

  • 神经网络代码详解

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

    编程 2025-04-25
  • Linux sync详解

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

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

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

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

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

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

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

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

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

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

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

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

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

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

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

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

    编程 2025-04-25

发表回复

登录后才能评论