ASP .Net Core 配置集合 IConfiguration 的使用

🐳简介

IConfiguration 是 ASP.NET Core 中的一个接口,用于表示配置集合。以下是关于 IConfiguration 的详细介绍:

  1. 作用:IConfiguration 允许开发人员从各种来源(如文件、环境变量、命令行参数等)读取应用程序的配置信息。这些配置信息可以用于设置数据库连接字符串、API 密钥、日志级别等。
  2. 实现:通常,我们不直接实例化 IConfiguration 接口,而是通过依赖注入(DI)来获取其实例。在 Startup 类的构造函数中,可以通过依赖注入得到 IConfiguration 实例,并通过它来访问配置数据。
  3. 使用方式:在 ASP.NET Core 应用程序中,通常会创建一个 IConfigurationBuilder 实例来构建 IConfiguration。IConfigurationBuilder 是一个用于构建 IConfiguration 实例的辅助类,它提供了多种方法来添加不同的配置源。
  4. 配置源:IConfiguration 支持多种配置源,包括但不限于 JSON 文件、环境变量、内存中的键值对、命令行参数等。这些配置源可以灵活组合,以满足不同的应用场景需求。
  5. 强类型配置:虽然 IConfiguration 本身是一个键值对集合,但 ASP.NET Core 还提供了一种机制,可以将配置数据绑定到强类型的类,这样可以更方便地访问和使用配置数据。

🐳实例演示

因为在Asp.Net项目中 IConfiguration 已经被默认注册到我们的服务中,因此在类中可以直接通过下面的示例代码中的构造函数注入方式使用 IConfiguration

cs 复制代码
public class HelloService : IHelloService
{
    private readonly IConfiguration _configuration;

    public HelloService(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void Hello()
    {
        foreach (var keyValuePair in _configuration.AsEnumerable())
        {
            Console.WriteLine($"Key:{keyValuePair.Key},value:{keyValuePair.Value}");
        }
    }
}

在上面代码的Hello方法中,我们遍历了_configuration中的键值对,并将它们打印到控制台,可以看到控制台中有非常多的内容,ASP.NET项目通常会默认添加一些配置。这些配置包括应用程序设置、日志打印级别、依赖注入等等

在Program中我们可以通过 builder.Configuration.Sources.Clear(); 清除所有已添加的配置源。

通过 builder.Configuration.AddJsonFile 将一个 JSON 文件作为配置源添加到配置中

将 optional 设置为true 指定配置文件中的某个部分或设置项是可选的。这意味着如果在配置文件中找不到这个设置,应用程序仍然可以正常运行,而不会抛出异常。

如我下面指定的 appsettings.json 文件不存在,由于optional设置为true,配置系统不会抛出异常,而是继续加载其他配置源。

reloadOnChange 设置为 true 表示文件发生更改时会自动重新加载

cs 复制代码
builder.Configuration.Sources.Clear();
builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

此时重启项目,Configuration中的配置就只有 appsettings.json 中的内容了。

我们将刚才的代码修改一下, 通过 Environment.MachineName 获取当前计算机的主机名,如果你的计算机主机名为Development的话,此时重启项目, appsettings.Development.json 就会覆盖掉我们 appsettings.json 中的节点内容。

cs 复制代码
builder.Configuration.Sources.Clear();
builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).
AddJsonFile($"appsettings.{Environment.MachineName}.json", optional: true, reloadOnChange: true);

但是通常我们的主机名称可能并不是Development,我们还有另一种方式,因为在IDE的调试配置中有通过命令行方式添加一个 ASPNETCORE_ENVIRONMENT=Development 的变量。

因此我们可以通过 Configuration.AddEnvironmentVariables() 这种方式,将当前主机的环境变量和上面的命令行设置的环境变量添加到应用程序的配置中,然后通过环境变量来判断当前的环境变量是什么。

cs 复制代码
builder.Configuration.Sources.Clear();
builder.Configuration.AddEnvironmentVariables();

builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).
AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true, reloadOnChange: true);

这样配置中就有我们设置中的环境变量等信息

appsettings.Development.json 就可以成功的覆盖我们的配置

还有当前主机的环境变量也成功被输出,如下图中我的其中一条环境变量JAVA_HOME为例

相关推荐
dotent·3 小时前
C#基于WPF UI框架的通用基础上位机测试WPF框架
ui·c#·wpf
合作小小程序员小小店4 小时前
桌面开发,超市管理系统开发,基于C#,winform,sql server数据库
开发语言·数据库·sql·microsoft·sqlserver·c#
合作小小程序员小小店5 小时前
桌面开发,在线%超市销售管理%系统,基于vs2022,c#,winform,sql server数据
开发语言·数据库·microsoft·c#
p***32357 小时前
如何使用C#与SQL Server数据库进行交互
数据库·c#·交互
2501_941807268 小时前
Java高性能消息队列与Kafka实战分享:大规模消息处理、异步通信与性能优化经验
c#·linq
周杰伦fans9 小时前
C# 中的**享元工厂**模式
开发语言·数据库·c#
鹿衔`9 小时前
通过Flink 1.19 客户端实现Flink集群连接 Kafka 基础测试报告
c#·linq
玩泥巴的11 小时前
.NET 8+ 飞书API实战:自动化群组管理与消息推送
c#·.net·二次开发·飞书
烛阴11 小时前
从`new`关键字开始:精通C#类与对象
前端·c#