欢迎来到【一个大西瓜】的博客

不曾为梦想奋斗,拿什么去燃烧青春。有梦之人亦终将老去,但少年心气如昨。
太阳每一个时刻都同时是夕阳和朝阳,每天她沉入西边,意味着她同时从另一面土地升起。
扩大
缩小

【ASP.NET Core快速入门】(六)配置的热更新、配置的框架设计

配置的热更新

什么是热更新:一般来说,我们创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的

我们只需要吧项目中用到的IOptions改成IOptionsSnapshot即可

那么是怎么实现的呢?

其实我们在添加json配置文件的时候往往没有添加后面两个参数。

第一个参数(optional):(Whether the file is optional)是否可选,意思是如果配置文件不存在的时候是否要抛异常。

第二个参数(reloadOnChange):(Whether the configuration should be reloaded if the file changes.)是否改变的时候重新加载。

其实我们在asp.net core项目中即使不加这两个参数,只要将IOptions改成IOptionsSnapshot就会进行热更新,CreateDefaultBuilder已经替我们进行了热更新。

下面我们看一下CreateDefaultBuilder的源代码

WebHost.cs源代码:https://github.com/aspnet/MetaPackages/blob/dev/src/Microsoft.AspNetCore/WebHost.cs

 

我们可以看到CreateDefaultBuilder已经默认加载appsetting.json文件,并启用了热更新

因为如果我们一直要保持文件变更读取的话,就要有一个线程一直对文件进行读取和变更操作。如果我们不想启用默认热更新的话,我们可以将热更新覆盖掉。

配置的框架设计

以下代码部分为伪代码

 初始化Builder

var builder = new ConfigurationBuilder()

将source添加到builder

aps.net corewei为我们提供了很多source和添加source的方式

builder.Add(source)

 

Build

var configurationRoot = builder.Build()

这里的Build实际上是对builder的每一个source进行Build,然后创建一个provider,添加到providers列表中,最后初始化了一个包含了所有的provider的配置

 

Use

使用的时候实际上是 遍历所有的provider,找到可以使用的provider然后返回value

 

从上面可以看出来最重要的是source和provider

IConfigurationSource与IConfigurationProvider

 


 我们可以看出Json、Memory、Inl、Command、Xml都实现IConfigurationSource接口

 

 

抽象类ConfigurationProvider实现IConfigurationProvider接口,其他的FileIConfigurationProvider(基类,文件的读取)、CommandIConfigurationProvider继承ConfigurationProvider,JsonConfigurationProvider、XmlConfigurationProvider继承FileIConfigurationProvider

 

posted on   一个大西瓜咚咚咚  阅读(7468)  评论(5编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示

目录导航