zoukankan      html  css  js  c++  java
  • .NET CORE 2.0小白笔记(五):配置的热更新、配置的框架设计

    配置的热更新

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

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

  • 相关阅读:
    CodeForces Gym 100935G Board Game DFS
    CodeForces 493D Vasya and Chess 简单博弈
    CodeForces Gym 100935D Enormous Carpet 快速幂取模
    CodeForces Gym 100935E Pairs
    CodeForces Gym 100935C OCR (水
    CodeForces Gym 100935B Weird Cryptography
    HDU-敌兵布阵
    HDU-Minimum Inversion Number(最小逆序数)
    七月馒头
    非常可乐
  • 原文地址:https://www.cnblogs.com/djd66/p/8399139.html
Copyright © 2011-2022 走看看