配置的热更新

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

我们只需要吧项目中用到的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

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

  1. 【笔记目录2】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总

    当前标签: ASP.NET Core快速入门 共2页: 上一页 1 2  任务27:Middleware管道介绍 GASA 2019-02-12 20:07 阅读:15 评论:0 任务26:dotne ...

  2. ASP.NET Core快速入门--学习笔记系列文章索引目录

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 抓住国庆假期的尾巴完成了此系列课程的学习笔记输出! ASP.NET Core快 ...

  3. 【笔记目录1】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总

    当前标签: ASP.NET Core快速入门 共2页: 1 2 下一页  任务50:Identity MVC:DbContextSeed初始化 GASA 2019-03-02 14:09 阅读:16 ...

  4. ASP.NET Core 快速入门(Razor Pages + Entity Framework Core)

    引子 自从 2009 年开始在博客园写文章,这是目前我写的最长的一篇文章了. 前前后后,我总共花了 5 天的时间,每天超过 3 小时不间断写作和代码调试.总共有 8 篇文章,每篇 5~6 个小结,总截 ...

  5. ASP.NET Core快速入门学习笔记(第2章:配置管理)

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务9:配置介绍 命令行配置 Json文件配置 从配置文件文本到c#对象实例的 ...

  6. ASP.NET Core快速入门_学习笔记汇总

    第2章 配置管理 任务12:Bind读取配置到C#实例 任务13:在Core Mvc中使用Options 任务14:配置的热更新 任务15:配置框架设计浅析 第3章 依赖注入 任务16:介绍- 任务1 ...

  7. ASP.NET Core快速入门(第2章:配置管理)- 学习笔记(转载)

    原文地址:https://mp.weixin.qq.com/s?__biz=MjM5NjMzMzE2MA==&mid=2451733443&idx=2&sn=6d01721c5 ...

  8. ASP.NET Core快速入门(第2章:配置管理)--学习笔记

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务9:配置介绍 命令行配置 Json文件配置 从配置文件文本到c#对象实例的 ...

  9. 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

    命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...

随机推荐

  1. Extjs小总结

    1.绑定工作流:    INSERT INTO `base_codeclass` VALUES (null, 'PM_CGSQ', '采购申请', null, null, null, '2018-09 ...

  2. 关于H5在微信浏览器内自动转格式,导致不能正常打开的问题

    从最近开始,微信朋友圈打开我们的H5页面有时会出现了“此网页已被QQ浏览器重新排版”的提示,直接结果就是导致H5网页或H5小游戏不能正常显示了!!这个问题什么严重,不知道腾讯又是怎么考虑的,难道真的是 ...

  3. 微信跳转技术,浏览器唤起微信,weixin://dl/business/?ticket=

    weixin://dl/business/?ticket=  到底怎么生成的?调用以下接口 weixin://dl/scan 扫一扫weixin://dl/feedback 反馈weixin://dl ...

  4. 编译部署 Mysql 5.7

    1.环境准备 RHEL7.4(最小化安装)  64bit   2G 内存 (1G 内存编译将近一个小时) 磁盘空间 15G 以上. 配置为本地yum 源 从MySQL5.7版本开始,安装MySQL需要 ...

  5. 动态规划-LIS1

    https://vjudge.net/contest/297216?tdsourcetag=s_pctim_aiomsg#problem/J #include<bits/stdc++.h> ...

  6. 如何理解opencv, python-opencv 和 libopencv?

    转:   OpenCV is a computer vision library written using highly optimized C/C++ code. It makes use of ...

  7. 34 文件地理数据库(GDB)变文件夹了怎么办

    我们都知道文件地理数据库(GDB)是ArcGIS软件特有的格式,有其独特的设计之处,在文件资源管理器中显示为.gdb的文件夹,但是里面的文件却看不明白,而且将gdb文件夹在Windows资源管理器中直 ...

  8. 让webstorm里提示nodejs智能补全

    webstorm里是默认没有nodejs只能提示的, 比如,输入requ到现在还不提示出require这个函数名,非常不方便. 设置方式: file  --> setting -->edi ...

  9. c# 通过MailHelper发送QQ邮件

    发送的方法 appsetting内容 第一个是发送邮件qq账号,第二个是QQ邮箱的POP3/SMTP服务码(下面会说怎么获取),第三个是服务器,第四个是端口 获取QQ邮箱的POP3/SMTP服务码 1 ...

  10. Mesos源码分析(15): Test Executor的运行

    Test Executor的代码在src/examples/test_executor.cpp中   int main(int argc, char** argv) {   TestExecutor ...