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

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.mzph.cn/news/759463.shtml

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

相关文章

inner join,left join,right join,outer join的区别

INNER JOIN:内连接是最常见的连接操作,它返回两个表中满足连接条件的交集。即只返回条件匹配的记录。 LEFT JOIN:左连接返回左表记录和右表记录匹配后组成的记录。以及左表中未与右表匹配的记录,右边用null显示。 RIGHT JOIN&…

好就业三种专业#信息安全#云计算#网络工程

一、信息安全专业 根据2021年网络安全宣传周白皮书的观察结果,网络安全产业对于人才的需求正以高速增长的趋势呈现,当前网络安全行业存在着巨大的人才缺口,平均供求比例约为1:2。这一现象导致了资深人才的储备不足,并且新人才的培…

如何画好架构图

什么是架构图? 架构图 架构的表达 架构在不同抽象角度和不同抽象层次的表达 架构可以从很多个角度去看,比如:业务架构、应用架构、技术架构、代码架构、数据架构等。 从架构级别来分类,使用金字塔的说明,上层级别…

图像分割论文阅读:Adaptive Context Selection for Polyp Segmentation

这篇论文的主要内容是关于一种用于息肉分割的自适应上下文选择网络(Adaptive Context Selection Network,简称ACSNet) 1,模型的整体结构 模型的整体结构基于编码器-解码器框架,并且包含了三个关键模块:局部…

贵州省二级分类土地利用数据(矢量)

贵州省,地处中国西南腹地,地貌属于中国西南部高原山地,境内地势西高东低,自中部向北、东、南三面倾斜,平均海拔在1100米左右。贵州高原山地居多,素有“八山一水一分田”之说。全省地貌可概括分为&#xff1…

【鸿蒙HarmonyOS开发笔记】通知模块之为通知添加行为意图

概述 WantAgent提供了封装行为意图的能力,这里所说的行为意图主要是指拉起指定的应用组件及发布公共事件等能力。HarmonyOS支持以通知的形式,将WantAgent从发布方传递至接收方,从而在接收方触发WantAgent中指定的意图。例如,在通…

RK3568平台开发系列讲解(pinctrl篇)引脚的复用关系的设置

🚀返回专栏总目录 文章目录 一、调用pinctrl_bind_pins二、dev_pin_info结构体沉淀、分享、成长,让自己和他人都能有所收获!😄 引脚的复用关系是在什么时候被设置的。 一、调用pinctrl_bind_pins 在内核源码目录下的 “drivers/base/dd.c” 文件中 static int really_p…

Java项目:67 ssm家政服务网站设计+jsp

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 家政服务网站,主要的模块包括查看 管理员;个人中心、用户管理、服务类型管理、家政类型管理、家政评价管理、家政资讯…

Cesium for UE-01-虚幻引擎的下载安装及插件配置

学习Cesium for UE的过程笔记 下载UE 下载 下载完成后,点击运行,执行安装 安装完成后需要下载epic game 下载完成,需要登录 没有账号的自行注册,或者选一个有账号的平台登录即可 选择虚幻引擎,再点击库 可以看到下…

课时70:流程控制_for循环_嵌套循环

2.4.4 嵌套循环 学习目标 这一节,我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 这里的嵌套实践,与选择语句的嵌套实践基本一致,只不过组合的方式发生了一些变化。常见的组合样式如下:for嵌套for语句for …

【工具使用】VScode配置gcc开发环境

一,简介 本文主要介绍如何在VScode中配置gcc环境,方便开发调试。 二,配置步骤 2.1 gcc环境配置 2.1.1 安装gcc环境 这里我使用的是msys2,具体安装步骤可以参考我另外一篇文章《史上最全msys2下载配置操作步骤》,这…

SpringCloud-Feign远程调用

使用Feign替代RestTemplate进行远程服务调用&#xff1a; 远程调用配置 1. 引入依赖 我们在order-service服务的pom文件中引入feign的依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starte…

计算机三级——网络技术(综合题第二题)

路由器工作模式 用户模式 当通过Console或Telnet方式登录到路由器时&#xff0c;只要输入的密码正确&#xff0c;路由器就直接进入了用户模式。在该模式下&#xff0c;系统提示符为一个尖括号(>)。如果用户以前为路由器输入过名称&#xff0c;则该名称将会显示在尖指号的前…

idea2022中修改护眼主题色和注释颜色

背景&#xff1a;重装了2022版本idea&#xff0c;想改idea的颜色 背景修改 效果如下。护眼模式好了 修改注释

Kafka生产者相关概念

文章目录 Kafka工作流程Kafka文件存储生产者分区策略生产者ISR生产者ack机制数据一致性问题ExactlyOnce Kafka工作流程 Kafka中消息是以topic进行分类的&#xff0c;Producer生产消息&#xff0c;Consumer消费消息&#xff0c;都是面向topic的。 Topic是逻辑上的概念&#xff…

流畅的 Python 第二版(GPT 重译)(十)

第十八章&#xff1a;with、match 和 else 块 上下文管理器可能几乎与子例程本身一样重要。我们只是初步了解了它们。[…] Basic 有一个 with 语句&#xff0c;在许多语言中都有 with 语句。但它们的功能不同&#xff0c;它们都只是做一些非常浅显的事情&#xff0c;它们可以避…

微服务day04(下) -- SpringAMQP

SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址&#xff1a;Spring AMQP SpringAMQP提供了三个功能&#xff1a; 自动声明队列、交换机及其绑定关系 基于注解的…

Macbook m1安装docker详细教程

下载安装包 进入官网 https://www.docker.com/ 下滑找到下载位置 下滑找到Mac对应安装包 等待下载完成即可。 安装 双击打开下载的安装包 将Docker拖到Applications中 安装完成后&#xff0c;找到安装的Docker 双击打开 点击accept同意 进入下面&#xff1a; 点fini…

隐私计算实训营学习二:隐私计算开源如何助力数据要素流通

文章目录 一、数据要素流转与数据内外循环二、数据外循环中的信任焦虑三、数据要素流通对隐私计算的期望四、隐私计算开源助力数据要素流通 一、数据要素流转与数据内外循环 数据要素流转过程(从数据采集加工->到数据价值释放)&#xff1a; 链路主要包括采集、存储、加工、…

蓝桥杯单片机快速开发笔记——串口通信

一、原理分析 二、思维导图 三、示例框架 #include <STC15F2K60S2.H> #include "HC573.h"void UartInit(void) //9600bps12.000MHz {SCON 0x50; //8位数据,可变波特率AUXR | 0x01; //串口1选择定时器2为波特率发生器AUXR & 0xFB; //定时器时钟12T模式…