TOptions接口

net Core 项目有个appsettings.json文件,程序默认也是读取的这个文件,appsettings.json是一个配置文件

我们可以把appsettings.json里面的json字符串映射成实体对象,打开appsettings.json文件,添加如下结构

Info是我新增的,Logging是默认生成的。暂时不管

新增实体类,不区分大小写

ConfigureServices注册

Configuration.GetSection("Info")  是获取appsettings.json文件中的某个节点,跟Info绑定

注册以后,在其他地方就可以通过DI注入使用了,比如:通过构造注入就能获取到数据了

IOptions 依赖命名空间: Microsoft.Extensions.Options;

如果你想在 ConfigureServices 中就使用对象Info呢?那么可以通过Bind方法

Bind方法有两个重载

所以可以这样绑定

上面说了。我们只是获取了appsettings.json中的某个节点,如果想把appsettings.json所有数据

都绑定到Configuration呢?还有一种是这样的结构

用上面的代码就行不通了,要换一种写法:

查看结果发现:info2是没有值的,这样又多了一个Get方法,

热更新IOptionsSnapshot接口

我们知道传统的net,如果修改了Web.Config网站是需要重启的,在net core是支持热更新的

IOptionsSnapshot 接口,也依赖于命名空间: using Microsoft.Extensions.Options

为了测试,我们在修改下构造函数

这样便于对比

ConfigureServices里面不变,加个断点,然后运行项目,目前他们是一样结果

然后我修改下appsettings.json某个字段的值

在次刷新项目,info2的值变了。IDE还用红色突出了这个值变化了

至于IOptions和IOptionsSnapshot有什么区别,我找了只是指出了一个支持热更新,一个不支持

具体内部的代码实现,有兴趣的小伙伴可以去github看源码

刚说了,net core 默认是加载appsettings.json文件,有个参数是可以指定:是否支持热更新

reloadOnChange 参数:如果文件更改,是否应重新加载配置。

当然,这仅仅对支持热更新的IOptionsSnapshot有效

我们也可以手动指定加载这个appsettings.json,当然,如果你手动加载的话,名字可以随便取,不一定叫appsettings.json

当然,约定大于配置,用这个名,一看就知道是配置文件

如果自定义,也就是用ConfigureAppConfiguration注册使用AddJsonFile方法,如果不添加 reloadOnChange

那么默认是false,那么IOptionsSnapshot就不会支持热更新了,具体对比结果我就不截图了

https://www.jianshu.com/p/b9416867e6e6

net Core TOptions和热更新的更多相关文章

  1. 2.4配置的热更新「深入浅出ASP.NET Core系列」

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 大家知道通常我们修改网站的配置文件比如,webconfig的时候,网站需要重启才能读取到最新的修改,所谓热更新就是 ...

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

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

  3. 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:这个词听着有点熟悉,但到底是什么呢? 一般来说:创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOpti ...

  4. 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新

    大家好,  我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain  用于 热更新 . 简单的说, 原理就是 类似 Asp.net 那样 让 当前 WebApp 运行在一个 A ...

  5. .NET CORE 2.0小白笔记(五):配置的热更新、配置的框架设计

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

  6. 【架构篇】ASP.NET Core 基于 Consul 动态配置热更新

    背景 通常,.Net 应用程序中的配置存储在配置文件中,例如 App.config.Web.config 或 appsettings.json.从 ASP.Net Core 开始,出现了一个新的可扩展 ...

  7. .net core 学习小结之 配置介绍(config)以及热更新

    命令行的配置 var settings = new Dictionary<string, string>{ { "name","cyao"}, {& ...

  8. Unity3D热更新全书FAQ

    只要有程序员朋友们问过两次的问题 就会收录在此FAQ中 1.C#Light对比LUA有什么好处 C#Light是静态类型脚本语言,语法同C#,Lua是动态类型脚本语言,这两种都有人喜欢. 我更喜欢静态 ...

  9. Webpack多入口文件、热更新等体验

    Webpack现今流行的前端打包工具,今儿本人也来分享下自己学习体验. 一.html-webpack-plugin 实现html模板文件的解析与生成 在plugins加入HtmlWebpackPlug ...

随机推荐

  1. Android人脸检测1(静态图片)

    搭建Android人脸识别环境花了很长时间(可以查看之前的文章),解决Android开发中的杂七杂八小问题也耗时不少. 今天记录一下,点击选择照片或者拍照上传照片进行人脸检测的小demo. (andr ...

  2. 咸鱼入门到放弃3--tomcat

    Tomcat学习与使用 一. Tomcat安装及配置 二.项目部署(虚拟目录映射) Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚似目录的映射. 虚 ...

  3. vs2019 cdkey 秘钥

    专业版NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y 企业版BF8Y8-GN2QH-T84XB-QVY3B-RC4DF

  4. python3类方法与静态方法

    静态⽅法和类⽅法 转载于:https://blog.csdn.net/qq_41020281/article/details/79634707 1. 类⽅法 是类对象所拥有的⽅法,需要⽤修饰器 @cl ...

  5. JavaScript(五)

    循环语句 程序中进行有规律的重复性操作,需要用到循环语句. for循环 for(var i=0;i<len;i++) { ...... } while循环 var i=0; while(i< ...

  6. VS2008,System.Runtime.InteropServices.COMException (0x800401F3): Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))

    在VS2008环境中编译调试运行不报错,但在发布的exe文件运行就报错 System.Runtime.InteropServices.COMException (0x800401F3): Invali ...

  7. angular.identity()

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. Codechef August Challenge 2018 : Modular GCD

    传送门 一开始还手动拓欧找规律,发现好像玩不了. 然后想了想,A-B这个数比较小,枚举它的因子判断合不合法就行了. 需要特判A=B的情况. #include<cstdio> #includ ...

  9. [LeetCode] Maximum Depth of N-ary Tree N叉树的最大深度

    Given a n-ary tree, find its maximum depth. The maximum depth is the number of nodes along the longe ...

  10. Python 在cmd中import模块成功,但是在jupyter notebook中No module xxx found

    由于需要用到python中的某个库,因此打开命令行窗口cmd,然后使用pip安装.安装成功后,在cmd中输入python调出python环境,import该模块并使用,可以正常使用.但是打开juypt ...