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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux 命令笔记:gpustat

1 命令介绍 gpustat是一个基于Python的命令行工具,它提供了一种快速、简洁的方式来查看GPU的状态和使用情况它是nvidia-smi工具的一个封装,旨在以更友好和易于阅读的格式显示GPU信息。gpustat不仅显示基本的GPU状态(如温度、GPU利用率和内存…

软考高级:软件架构风格-虚拟机风格概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

ubuntu部署wireguard服务端,ubuntu部署wireguard客户端

docker部署方式 docker run -d \--namewg-easy \-e WG_HOST6.6.6.6服务端IP \-e PASSWORD123abc登陆管理密码 \-e WG_DEFAULT_ADDRESS10.0.8.x客户端 IP 地址范围 \-e WG_DEFAULT_DNS1.1.1.1配置dns \-e WG_ALLOWED_IPS10.0.8.0/24 \-e WG_PERSISTENT_KEEPALIVE25 \-v ~/.wg-e…

汽车KL15、KL30、ACC的区别

文章目录 前言一、KL30是什么?二、KL15是什么?KL15信号的演变 三、为啥用KL15、KL30呢? 前言 相信刚接触汽车电子的伙伴都会有一个疑惑,什么是KL15?什么是KL30? 内心一脸懵逼…… KL是德语Klemme的缩写,指的是ECU的…

【ChatGLM3-6B】本地大模型使用方法详细教程!!!内含详细的代码解析!!

ChatGLM3介绍 ChatGLM3 是智谱AI与清华大学KEG实验室联合发布的新一代对话预训练模型。 ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,Ch…

Day62:WEB攻防-PHP反序列化CLI框架类PHPGGC生成器TPYiiLaravel等利用

目录 反序列化链项目-PHPGGC&NotSoSecure NotSoSecure(综合类) PHPGGC(单项类) 反序列化框架利用-ThinkPHP&Yii&Laravel [安洵杯 2019]iamthinking Thinkphp V6.0.X 反序列化 CTFSHOW 反序列化 267 Yii2反序列化 CTFSHOW 反序列化 271 Laravel反序列化 知识…

[Qt学习笔记]Qt使用MFC编译生成dll库在无编程环境电脑出现无法加载dll的问题

目录 1、 问题介绍2、 问题分析3、 问题总结和思考 1、 问题介绍 在项目实践中,使用Qt调用了一个vs创建的dll库,在本机上编译和release后的exe可以加载对应的dll文件,将exe拷贝到有vs编程环境的电脑上也可以加载对应的dll文件,但…

Maven Deploy测试

文章目录 Maven环境deployreleaseRepo Manager演示 RefFAQ Maven 环境 jdk8maven v3.9.5 deploy mvn install将jar存到localRepository,mvn deploy把jar推送到远程仓库,然后可以像central库那样下载依赖。 release 基于git执行项目发版流程&#x…

ab (Apache benchmark) - 压力/性能测试工具

Apache benchmark(ab) 安装window安装使用方法 - bin目录运行使用方法 - 任意目录运行 linux安装 基本命令介绍常用参数:输出结果分析: ab的man手册 安装 window安装 官网下载链接:https://www.apachehaus.com/cgi-bin/download…

鸿蒙Harmony应用开发—ArkTS-高级组件:@ohos.arkui.advanced.Chip(操作块组件)

操作块,用于搜索框历史记录或者邮件发送列表等场景。 说明: 该组件从API Version 11开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 Chip Chip({options:ChipOptions}) 装饰器类型:Builde…

软考高级:软件架构风格-数据流风格概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

用户登录项目JAVA简单实现

1、“zhangsan”.equals(userName) 把常量放在前面是为了防止空指针、 2、session不用我们担心会不会空指针,如果为null会为我们创建个空的session 3、网页清缓存 (1)ctrlF5 (2)ctrlshiftdel…

FPGA学习_时序分析

文章目录 前言一、组合逻辑与时序逻辑二、建立时间和保持时间三、建立时间和保持时间 前言 心中有电路,下笔自然神!!! 一、组合逻辑与时序逻辑 组合逻辑:没有时钟控制的数字电路,代码里的判断逻辑都是组…

浅析扩散模型与图像生成【应用篇】(九)——UNIT-DDPM

10. UNIT-DDPM: UNpaired Image Translation with Denoising Diffusion Probabilistic Models 该文提出一种基于DDPM的非配对的图像转换方法,称为UNIT-DDPM,能够实现源域的图像到目标域图像的转换,在保留原有图像内容的同时,转换为…

现货黄金做对冲的具体方法

现货黄金做对冲的具体方法是运用金融衍生工具和策略,以减轻或消除持有现货黄金所面临的市场风险。具体而言,投资者可通过期货合约、期权、掉期等金融工具来实现对冲,保障其投资价值不受金价波动的负面影响。  期货合约在对冲中…

让数据在两个buckets之间传输 - Google Storage Transfer Service

在业务场景中, 有时我们不想直接暴露数据存储空间给上游系统, 而需要设置1个landing Path 让上游系统发送数据 如图: 我们只需grant landing bucket 的权限给上游系统, 而上游系统是访问不了storage bucket的保证了数据隔离 但是…

vue3与Electron构建跨平台应用(webpack)

一、创建vue3项目 vue create vue3_webpack_electron 二、安装Electron npm install --save-dev electron Electron 三、vue add electron-builder vue add electron-builder

RK3568平台开发系列讲解(pinctrl篇)pinctrl 子系统函数操作集

🚀返回专栏总目录 文章目录 一、pinctrl_ops二、pinctrl_ops三、pinconf_ops沉淀、分享、成长,让自己和他人都能有所收获!😄 在 pinctrl_desc 结构体中总共有三个函数操作集, 具体内容如下所示: const struct pinctrl_ops *pctlops; // 引脚控制操作函数指针 const

【机器学习】基于萤火虫算法优化的BP神经网络分类预测(FA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】萤火虫算法(FA)原理及实现 2.设计与实现 数据集: 多输入多输出:样本特征24,标签类别4。…

html常见标签

width宽度 height高度 border边框 1px(边框线条宽度) solid(实线) red(红色) border-radius: 100px 边框圆角 background-color:red(背景颜色为红色) margin&#xf…