配置的热更新

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

我们只需要吧项目中用到的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. 动态DP之全局平衡二叉树

    目录 前置知识 全局平衡二叉树 大致介绍 建图过程 修改过程 询问过程 时间复杂度的证明 板题 前置知识 在学习如何使用全局平衡二叉树之前,你首先要知道如何使用树链剖分解决动态DP问题.这里仅做一个简 ...

  2. html5 input输入实时检测以及延时优化

    有个项目是,这么个情况,输入框,实时监测输入,触发请求. 第一想法是input 上的onchange()方法,试了一下,不好用,是值等更改确认了,才会触发,不即时. 上网查了一下, $("# ...

  3. Debug命令详解

    Debug在学习汇编的过程中,担任着一个非常重要的角色,是一个极其重要的调试工具,所以学会它是必须的. 命令格式 功能说明 A [地址] 输入汇编指令 C [范围] 起始地址 对由“范围”指定的区域与 ...

  4. java.lang.ClassCastException: net.sf.json.JSONNull cannot be cast to net.sf.json.JSONObject的解决方法

    报错情况已经说明了,在百度查了好几个解决方法,这里总结一下: 首先:加一个判断是否为空,再做操作 // 得到json串 String jsonString = UtilPOSTGET.UPost(FO ...

  5. 用Group by分组后,取每组的前3条记录,怎么取?

    使用子查询进行查询 SELECT * FROM home_content a WHERE ( SELECT count(id) FROM home_content WHERE class_link = ...

  6. 用递归方法求n的阶乘

    代码: #include<iostream> using namespace std; int fact(int n); int main() { int n; loop: cin > ...

  7. NPOI 修改指定单元格字体颜色

    //创建一个字体颜色 IFont font = hssfworkbook.CreateFont(); //红色 font.Color = HSSFColor.Red.Index; //样式 ICell ...

  8. java小练习

    打印99乘法表 因为有9行9列,所有要用两个for循环 int m; for (int i = 1; i < 10; i++) { for (int j = 1; j <= i; j++) ...

  9. [Swift]LeetCode123. 买卖股票的最佳时机 III | Best Time to Buy and Sell Stock III

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  10. [Swift]LeetCode151. 翻转字符串里的单词 | Reverse Words in a String

    Given an input string, reverse the string word by word. Example: Input: "the sky is blue", ...