ASP.NET Core - 配置系统之配置添加

ASP.NET Core - 配置系统之配置添加

  • 2. 配置添加

2. 配置添加

配置系统可以读取到配置文件中的信息,那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 对象) 中有一个 Configuration 属性,这里就是我们扩展添加额外的配置的地方。

查看 Configuration 属性,可以看到是 ConfigurationManager 类型,而 ConfigurationManager 实现了 IConfigurationBuilder 接口。

在这里插入图片描述
在这里插入图片描述
IConfigurationBuilder 接口定义如下:

public interface IConfigurationBuilder{// 存放用于该 Builder 的 Sources 列表中各个元素的共享字典IDictionary<string, object> Properties { get; }// 已注册的 IConfigurationSource 列表IList<IConfigurationSource> Sources { get; }// 将 IConfigurationSource 添加到 Sources 中IConfigurationBuilder Add(IConfigurationSource source);// 通过 Sources 构建配置提供程序实例,并创建 IConfigurationRoot 实例IConfigurationRoot Build();
}

而它的实现类 ConfigurationBuilder 就是配置系统的入口。

public class ConfigurationBuilder : IConfigurationBuilder
{public IList<IConfigurationSource> Sources { get; } = new List<IConfigurationSource>();public IDictionary<string, object> Properties { get; } = new Dictionary<string, object>();public IConfigurationBuilder Add(IConfigurationSource source){if (source == null){throw new ArgumentNullException(nameof(source));}Sources.Add(source);return this;}public IConfigurationRoot Build(){var providers = new List<IConfigurationProvider>();foreach (IConfigurationSource source in Sources){IConfigurationProvider provider = source.Build(this);providers.Add(provider);}return new ConfigurationRoot(providers);}
}

当我们启动一个 ASP.NET Core应用的时候是创建并启动了一个Web主机,由 Web 主机来启动并管理我们的应用的生命周期,在这个过程中会默认添加一些配置提供程序,加载一些配置信息。这些操作就在以下代码中:

var builder = WebApplication.CreateBuilder(args);

.NET Core 框架下的主机除了适用于 Web 应用的 Web 主机之外,还有通用主机。若是在普通的控制台应用程序,想要通过主机启动应用,并使用配置系统可用以下方式:

using IHost host = Host.CreateDefaultBuilder(args).Build();
host.Run();

主机这块就先稍微了解以下,后面还会有专门的文章去介绍。除了通过主机的方式使用配置系统之外,我们也可以直接通过 ConfigurationBuilder 类构建,如下:

IConfiguration config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();config.GetValue<string>("Logging:LogLevel:Default");

这里需要引入相应的 Nuget 包,例如使用 ConfigurationBinder 相关的扩展方法就要引入 Microsoft.Extensions.Configuration.Binder Nuget包,使用 Json 格式配置文件就要引入Microsoft.Extensions.Configuration.Json Nuget包,该Nuget 包中包含 AddJsonFile 扩展方法,通过指定文件路径添加相应的配置文件到配置系统中。

配置文件多种多样,比较常用的都有 Json 、xml、ini、yaml 等多种格式,甚至配置信息不一定存储在文件之中。.NET Core 配置系统对各种来源的配置信息进行了抽象,不同来源只要提供相应的配置提供程序即可,也就是我们上面在 IConfigurationRoot 接口中看到的 IConfigurationProvider 接口的实现类。配置提供程序内部对不同来源不同格式的配置信息进行加载、刷新,并提供统一的访问方式,也就是键值对,实际上所有的配置信息最终会以键值对的方式被读取到内存中的 Dictionary 对象中。

我们要添加不同类型不同来源的配置信息,只需要通过 IConfigurationBuilder 实现类对象添加不同的配置提供程序即可。在 ASP.NET Core 应用之中,可以通过以下方式进行添加:

// 添加一个xml配置文件,并加入到配置系统中
var configirationFilePath = Path.Combine(Directory.GetCurrentDirectory(), "xxx.xml");
builder.Configuration.AddXmlFile(configirationFilePath);

也可以通过以下方式:

builder.WebHost.ConfigureAppConfiguration(builder =>
{builder.AddXmlFile("");
});

这两种方式是一样的效果的,只不过具体的实现类不同,ConfigureAppConfiguration 可以将原有的配置提供程序清空,而 builder.Configuration 则不行,只能往集合后面继续添加。



参考文章:

ASP.NET Core 中的配置 | Microsoft Learn
配置 - .NET | Microsoft Learn
理解ASP.NET Core - 配置(Configuration)



ASP.NET Core 系列总结:
目录:ASP.NET Core 系列总结
上一篇:ASP.NET Core - 配置系统之配置读取
下一篇:ASP.NET Core — 配置系统之配置提供程序

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

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

相关文章

AI编程工具横向评测--Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发

AI编程工具横向评测–Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发 数据分析类应用的开发&#xff0c;指的是首先进行数据分析&#xff0c;比如统计学分析、机器学习模型的构建等&#xff0c;然后将分析的流程开发成数据分析类的工具&#xff0c;或者将数据分…

HBase实训:纸币冠字号查询任务

一、实验目的 1. 理解分布式数据存储系统HBase的架构和工作原理。 2. 掌握HBase表的设计原则&#xff0c;能够根据实际业务需求设计合理的表结构。 3. 学习使用HBase Java API进行数据的插入、查询和管理。 4. 实践分布式数据存储系统在大数据环境下的应用&#xff0c;…

算法与数据结构——复杂度

目录 一 数据结构前言 1 数据结构 2 算法 3 算法与数据结构的关系 二 算法效率 1 算法效率&#xff1a; 2 复杂度 2.1 概念&#xff1a; 2.2分类&#xff1a; 2.3 空间复杂度在计算机高速发展的现代重要吗&#xff1f; 3 复杂度的重要性 三 时间复杂度…

usb通过hdc连接鸿蒙next的常用指令

参考官方 注册报名https://www.hiascend.com/developer/activities/details/44de441ef599450596131c8cb52f7f8c/signup?channelCodeS1&recommended496144 hdc-调试命令-调测调优-系统 - 华为HarmonyOS开发者https://developer.huawei.com/consumer/cn/doc/harmonyos-guid…

论文笔记-arXiv2025-A survey about Cold Start Recommendation

论文笔记-arXiv2025-Cold-Start Recommendation towards the Era of Large Language Models: A Comprehensive Survey and Roadmap 面向大语言模型&#xff08;LLMs&#xff09;时代的冷启动推荐&#xff1a;全面调研与路线图1.引言2.前言3.内容特征3.1数据不完整学习3.1.1鲁棒…

如何将数据库字符集改为中文,让今后所有的数据库都支持中文

最后一行有我自己的my.ini文件 数据库输入中文数据时会变为乱码&#xff0c; 这个时候&#xff0c;我们为每个数据库设置字符集&#xff0c;太过于麻烦&#xff0c;为数据库单独设置重启后又会消失 Set character_set_database’utf8’; Set character_set_server’utf8’; …

AI刷题-小R的随机播放顺序、不同整数的计数问题

目录 一、小R的随机播放顺序 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终代码&#xff1a; 运行结果&#xff1a; 二、 不同整数的计数问题 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终…

从零搭建SpringBoot3+Vue3前后端分离项目基座,中小项目可用

文章目录 1. 后端项目搭建 1.1 环境准备1.2 数据表准备1.3 SpringBoot3项目创建1.4 MySql环境整合&#xff0c;使用druid连接池1.5 整合mybatis-plus 1.5.1 引入mybatis-plus1.5.2 配置代码生成器1.5.3 配置分页插件 1.6 整合swagger3&#xff08;knife4j&#xff09; 1.6.1 整…

在.NET用C#将Word文档转换为HTML格式

将Word文档转换为HTML格式尤其具有显著的优势&#xff0c;它不仅能够确保文档内容在多种设备和平台上保持一致灵活的显示&#xff0c;还便于通过网络进行传播和集成到各种Web应用中。随着越来越多的企业和开发者寻求更灵活、更具兼容性的文件处理方式&#xff0c;.NET框架下的C…

GPT-5 传言:一场正在幕后发生的 AI 变革

新的一年&#xff0c;让我们从一个引人入胜的话题开始&#xff1a;如果我告诉你&#xff0c;GPT-5 并非虚构&#xff0c;而是真实存在呢&#xff1f;它不仅真实存在&#xff0c;而且正在你看不见的地方悄然塑造着世界。我的基本假设是&#xff1a;OpenAI 已经秘密开发出 GPT-5&…

【机器学习实战】kaggle 欺诈检测---使用生成对抗网络(GAN)解决欺诈数据中正负样本极度不平衡问题

【机器学习实战】kaggle 欺诈检测---如何解决欺诈数据中正负样本极度不平衡问题https://blog.csdn.net/2302_79308082/article/details/145177242 本篇文章是基于上次文章中提到的对抗生成网络&#xff0c;通过对抗生成网络生成少数类样本&#xff0c;平衡欺诈数据中正类样本极…

ZNS SSD垃圾回收优化方案解读-2

四、Brick-ZNS 关键设计机制解析 Brick-ZNS 作为一种创新的 ZNS SSD 设计&#xff0c;聚焦于解决传统 ZNS SSDs 在垃圾回收&#xff08;GC&#xff09;过程中的数据迁移低效问题&#xff0c;其核心特色为存储内数据迁移与地址重映射功能。在应用场景中&#xff0c;针对如 Rock…

浅谈云计算14 | 云存储技术

云存储技术 一、云计算网络存储技术基础1.1 网络存储的基本概念1.2云存储系统结构模型1.1.1 存储层1.1.2 基础管理层1.1.3 应用接口层1.1.4 访问层 1.2 网络存储技术分类 二、云计算网络存储技术特点2.1 超大规模与高可扩展性2.1.1 存储规模优势2.1.2 动态扩展机制 2.2 高可用性…

C++ 强化记忆

1 预处理指令 # include <> #include <filename> 添加系统头文件。 #include "filename" 添加自定义头文件。 # include <iostream> 对应使用cout cin的情况下需要添加 # include <string> 对应使用字符串情况 # include <fstream> …

web worker 前端多线程一、

前言&#xff1a; JavaScript 语言采用的是单线程模型&#xff0c;也就是说&#xff0c;所有任务只能在一个线程上完成&#xff0c;一次只能做一件事。前面的任务没做完&#xff0c;后面的任务只能等着。随着电脑计算能力的增强&#xff0c;尤其是多核 CPU 的出现&#xff0c;单…

Vue项目搭建教程超详细

目录 一. 环境准备 1. 安装node.js 2. 安装Vue cli 二. 创建 Vue 2 项目 1. 命令行方式 2. vue ui方式 一. 环境准备 1. 安装node.js 可参考node.js卸载与安装超详细教程-CSDN博客 2. 安装Vue cli npm install -g vue/cli检查是否安装成功 vue --version Vue CLI …

IM聊天学习资源

文章目录 参考链接使用前端界面简单效果消息窗口平滑滚动至底部vue使用watch监听vuex中的变量变化 websocket握手认证ChatKeyCheckHandlerNettyChatServerNettyChatInitializer 参考链接 zzhua/netty-chat-web - 包括前后端 vue.js实现带表情评论功能前后端实现&#xff08;仿…

彻底理解JVM类加载机制

文章目录 一、类加载器和双亲委派机制1.1、类加载器1.2、双亲委派机制1.3、自定义类加载器1.4、打破双亲委派机制 二、类的加载 图片来源&#xff1a;图灵学院   由上图可知&#xff0c;创建对象&#xff0c;执行其中的方法&#xff0c;在java层面&#xff0c;最重要的有获取…

使用FRP进行内网穿透

一、基本概念 内网穿透&#xff1a;它是一种网络技术或方法&#xff0c;旨在允许外部网络&#xff08;如互联网&#xff09;访问位于内部网络&#xff08;内网&#xff09;中的设备或服务。由于内部网络通常处于NAT&#xff08;网络地址转换&#xff09;、防火墙或其他安全机制…