net Core TOptions和热更新
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和热更新的更多相关文章
- 2.4配置的热更新「深入浅出ASP.NET Core系列」
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 大家知道通常我们修改网站的配置文件比如,webconfig的时候,网站需要重启才能读取到最新的修改,所谓热更新就是 ...
- 【ASP.NET Core快速入门】(六)配置的热更新、配置的框架设计
配置的热更新 什么是热更新:一般来说,我们创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOptions改成IOptionsSnap ...
- 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计
配置的热更新 什么是热更新:这个词听着有点熟悉,但到底是什么呢? 一般来说:创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOpti ...
- 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新
大家好, 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新 . 简单的说, 原理就是 类似 Asp.net 那样 让 当前 WebApp 运行在一个 A ...
- .NET CORE 2.0小白笔记(五):配置的热更新、配置的框架设计
配置的热更新 什么是热更新:一般来说,我们创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOptions改成IOptionsSnap ...
- 【架构篇】ASP.NET Core 基于 Consul 动态配置热更新
背景 通常,.Net 应用程序中的配置存储在配置文件中,例如 App.config.Web.config 或 appsettings.json.从 ASP.Net Core 开始,出现了一个新的可扩展 ...
- .net core 学习小结之 配置介绍(config)以及热更新
命令行的配置 var settings = new Dictionary<string, string>{ { "name","cyao"}, {& ...
- Unity3D热更新全书FAQ
只要有程序员朋友们问过两次的问题 就会收录在此FAQ中 1.C#Light对比LUA有什么好处 C#Light是静态类型脚本语言,语法同C#,Lua是动态类型脚本语言,这两种都有人喜欢. 我更喜欢静态 ...
- Webpack多入口文件、热更新等体验
Webpack现今流行的前端打包工具,今儿本人也来分享下自己学习体验. 一.html-webpack-plugin 实现html模板文件的解析与生成 在plugins加入HtmlWebpackPlug ...
随机推荐
- js 获取两个时间戳之间相隔多少天多少小时多少分多少秒
<script> function getRemainderTime (startTime){ var s1 = new Date(startTime.replace(/-/g, &quo ...
- vue 获取dom的css属性值
<template> <div id="topInfo" ref="topInfo" style="width: 200px;hei ...
- Mac 常用的快捷键
Mac 菜单和键盘通常对某些按键使用符号,其中包括以下修饰键: Command(或 Cmd)⌘ Shift ⇧ Option(或 Alt)⌥ Control(或 Ctrl)⌃ Caps Lock ⇪ ...
- Codeforces.1043F.Make It One(DP 容斥)
题目链接 \(Description\) 给定\(n\)个数\(A_i\),求最少选出多少个数,使得它们的\(\gcd\)为\(1\). \(n,A_i\leq3\times10^5\). \(Sol ...
- python3 配置logging日志类
配置类config_file: from configparser import ConfigParser class config_file: def __init__(self,conf_file ...
- (97)Wangdao.com_第三十天_触摸事件
触摸事件 只有触摸屏才会引发这一类事件 触摸事件 和 鼠标事件 同时触发,即使这个时候并没有用到鼠标. 这是为了让那些只定义鼠标事件.没有定义触摸事件的代码,在触摸屏的情况下仍然能用. 如果想避免这种 ...
- 16进制转化8进制---map
#include "stdio.h" #include "string.h" #include "string" #include &quo ...
- css边框渐变
在实际开发中,我们经常遇见边框需要背景渐变的实现要求,那么如何去实现呢,今天给大家分享依稀几种情况 1.直角的背景渐变 <!DOCTYPE html> <html lang=&quo ...
- Oracle 备份与恢复
在进行生产服务器升级.或更换数据库服务器.搭建测试环境时,需要对生产数据库进行备份以及将来可能的还原. 1.expdp导出 expdp DMS version directory=DATA_PUMP_ ...
- MySQL自动备份shell脚本
在数据库的日常维护工作中,除了保证业务的正常运行以外,就是要对数据库进行备份,以免造成数据库的丢失,从而给企业带来重大经济损失.通常备份可以按照备份时数据库状态分为热备和冷备,按照备份数据库文件的大小 ...