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

news2024/9/30 17:29:53

🐳简介

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

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 表示文件发生更改时会自动重新加载

builder.Configuration.Sources.Clear();
builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

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

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

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() 这种方式,将当前主机的环境变量和上面的命令行设置的环境变量添加到应用程序的配置中,然后通过环境变量来判断当前的环境变量是什么。

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为例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1540692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PySide6-YOLO8目标检测、追踪可视化界面

目录 项目地址实现效果DetectTrack 项目地址 https://github.com/zhengjie9510/pyside-yolo 实现效果 Detect Track

【蓝牙协议栈】【BLE】低功耗蓝牙配对绑定过程分析(超详细)

1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅,【蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待&#xff01…

网络层(IP层)

IP协议的本质:有将数据跨网络传输的能力 而用户需要的是将数据从主机A到主机B可靠地跨网络传输 IP的组成:目标网络目标主机 IP由目标网络和目标主机两部分组成,IP报文要进行传输,要先到达目标网络,然后经过路由器转到…

Unity3d Shader篇(十六)— 模拟雪的Shader

文章目录 前言一、什么是模拟雪的Shader?1. 雪Shader原理2. 雪Shader优缺点优点:缺点: 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数6. 控制雪大小的脚本 三、效果四、总结 …

AI大模型学习:理论基石、优化之道与应用革新

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

数组三(冒泡排序、二分查找)

目录 冒泡排序算法 冒泡排序的基础算法 冒泡排序的优化算法 二分法查找 冒泡排序算法 冒泡排序是最常用的排序算法,在笔试中也非常常见,能手写出冒泡排序算法可以说是 基本的素养。 冒泡排序的基础算法 冒泡排序算法重复地走访过要排序的数列&#…

GUROBI的数据结构

为了在GUROBI中能够更加高效地建模,Python API内置了三种特殊的数据结构,方便根据下标来查找数据。注意在使用这三种数据结构之前需要 import gurobipy as gp multidict 一、普通字典dict()的用法 小结:普通字典dict()只有一个返回值&…

Java代码基础算法练习-数位交换-2024.03.23·

任务描述: 输入一个三位整数,将其个位和百位交换后输出 任务要求: package march0317_0331;import java.util.Scanner;public class m240323 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out…

PointNet++论文复现(二)【最远点采样-球查询-采样和分组 代码详解】

最远点采样-球查询-采样和分组-代码详解 专栏持续更新中!关注博主查看后续部分! 最远点采样、球查询等位于 pointnet2_utils.py 定义 点云坐标归一化 点云坐标归一化是一种预处理步骤,用于将点云数据标准化到一个统一的尺度,通常是在一个特定的范围内,比如 [-1, 1] 或…

服务器运行一段时间后

自己记录一下。 一、查看目录占用情况 df -h 命令查看磁盘空间 du -ah --max-depth=1 / 查看根目录下各个文件占用情况 二、mysql日志清空 这个日志是可以清空的 echo > /usr/local/mysql/data/syzl-db2.log #将文件清空 说明: 这个文件这么大是因为,开启 …

[ C++ ] STL---反向迭代器的模拟实现

目录 前言: 反向迭代器简介 list反向迭代器的模拟实现 反向迭代器的模拟实现(适配器模式) SGI版本STL反向迭代器源码 STL库中解引用操作与出口设计 适配list的反向迭代器 适配vector的反向迭代器 前言: 反向迭代器是一种特殊类型的迭代器&#xf…

C语言函数和数组

目录 一.数组 一.一维数组: 1.一维数组的创建: 2.一维数组的初始化: 3.一维数组的使用 4.一维数组在内存中的存储: 二.二维数组: 三.数组越界: 四.数组作为函数参数: 二.函数 一.函数是什么&…

Redis I/O多路复用

I/O多路复用 Redis的I/o多路复用中,将多个连接放到I/O复用程序中,这个复用程序具体是什么,是Redis的主线程吗 在Redis的I/O多路复用机制中,“复用程序”实际上指的是操作系统提供的系统调用接口,如Linux下的epoll、sel…

Unity 学习日记 8.2D物理引擎

1.2D刚体的属性和方法 2.碰撞器

探索 Flutter 中的 NavigationRail:使用详解

1. 介绍 在 Flutter 中,NavigationRail 是一个垂直的导航栏组件,用于在应用程序中提供导航功能。它通常用于更大屏幕空间的设备,如平板电脑和桌面应用程序。NavigationRail 提供了一种直观的方式来浏览应用程序的不同部分,并允许…

【并发编程】锁相关公平锁和非公平锁?可重入锁锁的升级乐观锁和悲观锁版本号机制CAS 算法乐观锁有哪些问题?

目录 ​编辑 锁相关 公平锁和非公平锁? 可重入锁 锁的升级 乐观锁和悲观锁 版本号机制 CAS 算法 乐观锁有哪些问题? 锁相关 公平锁和非公平锁? 公平锁 : 锁被释放之后,先申请的线程先得到锁。性能较差一些,因…

第六届“传智杯”决赛 流水账 | 珂学家

前言 整体评价 有幸参加了第六届的传智杯决赛(A组),因为这个比赛是牛客协办,所以就写在这里。 作为Java选手,比赛中其实吃亏了,主要是T2吃了一发TLE,T4吃了一发莫名其妙的MLE。 顺便吐槽下T3,自测反馈WA…

局域网内的手机、平板、电脑的文件共享

在日常工作生活中,经常需要将文件在手机、平板、电脑间传输,以下介绍三种较为便捷的方法: 1.LocalSend 该软件是免费开源的,可以在局域网内的任意手机、平板、电脑间传递文件,并且任意一方都可以作为“发送方”和“接…

Windows11 安装confluence 7.4.0

Windows11安装confluence:7.4.0 1.打开终端管理员(管理员权限的PowerShell)2.按顺序执行以下命令,安装confluence服务3.浏览器(如Microsoft Edge) 打开 http://127.0.0.1:8100/ 配置confluence4.图示 本文是Windows11 安装confluence 7.4.0的步骤 本文参考 1.打开终端管理员(管…

⾃定义类型:结构体

目录 1. 结构体类型的声明 1.1 结构体回顾 1.1.1 结构的声明 1.1.2 结构体变量的创建和初始化 1.2 结构的特殊声明 1.3 结构的⾃引⽤ 2. 结构体内存对⻬ 2.1 对⻬规则 2.2 为什么存在内存对⻬? 2.3 修改默认对⻬数 3. 结构体传参 4. 结构体实现位段 4.1 什么是位段…