配置的热更新

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

我们只需要吧项目中用到的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. BZOJ.4842.[NEERC2016]Delight for a Cat(费用流)

    BZOJ 参考这儿. 首先如果一个活动的时间满足条件,那么另一个活动也一定满足.还有就是这题就是费用流没有为什么.不妨假设最初所有时间都用来睡觉,那么我们要对每个\(k\)大小区间选出\([t2,k- ...

  2. 使用anaconda创建tensorflow环境后如何在jupyter notebook中使用

    在以下目录中 C:\Users\UserName\AppData\Roaming\jupyter\kernels\python3 打开kernel.json文件,将python.exe文件的路径修改至 ...

  3. 更换MariaDB数据库

    https://downloads.mariadb.org/mariadb/repositories/#mirror=neusoft&distro=Ubuntu&distro_rele ...

  4. TimesTen数据库表中显示中文乱码的真正原因

    上一篇博客TimesTen中文乱码问题(其实是cmd.exe中文乱码)的内容可能不对,也许只是个巧合?不得而知了.因为我今天重装系统了,把win10换成了win7(64bit).又安装了timeste ...

  5. 在VB中动态执行VBS代码,可操控窗体控件

    通过执行一段VBS代码来操控窗体内的控件也可以使用AddObject方法添加自己的类,那么在动态VBS代码中也一样可以使用在增加程序扩展性或是有脚本化需求的时候,这个方法还是不错的. Option E ...

  6. typescript 安装

    1,全局安装 cnpm install typescript -g (tsc -v) 2,初始化 tsc --init 3,自动编译(hbuilder) 工具-插件安装-浏览eclipse插件市场-搜 ...

  7. 201771010126 王燕《面向对象程序设计(java)》第十一周学习总结

    实验十一   集合 实验时间 2018-11-8 1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: Vector类实现了长度可变的数组. Vecto ...

  8. node05

    1.ejs: const ejs = require('ejs') ejs.renderFile('./template/a.ejs', {name:'cc'}, function (err, dat ...

  9. php代码进行跨域请求处理

    以下的函数作为每个请求的前置操作 (thinkphp框架) public function appInit(&$params) { header('Access-Control-Allow-O ...

  10. Java GC相关知识

    Java堆的分类 分为两类:YoungGen和OldGen.其中,YoungGen分为三部分:eden,from survivor和to survivor,比例默认是:8:1:1 PermGen不属于 ...