Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >详解.NET Core 选项框架(Options)

详解.NET Core 选项框架(Options)

作者头像
心莱科技雪雁
发布于 2021-07-01 01:48:12
发布于 2021-07-01 01:48:12
8780
举报
文章被收录于专栏:雪雁的专栏雪雁的专栏

前言

.NET Core 引入了Options模式,使用强类型的类来表达配置项,提供了三种在不同场景下的使用接口:

IOptions

IOptionsSnapshot

IOptionsMonitor

但是常常不知道什么时候使用哪种方式才最合适,接下来我就用代码详细解读一下三种接口。

代码示例

前期准备

首先新建.NET Core API项目来进行代码测试:

DemoOptions 用来接收配置的强类型:

在 Startup 中绑定配置和以 Singleton 模式注入测试的服务:

详解IOptions

修改 DemoService代码如下:

跑起来代码结果如下,很方便的获取到配置项:

尝试修改appsetting.json文件配置,重新请求一下接口,可以配置还是未修改之前的:

很容看出,IOptions 可以注入到任何依赖注入周期,但是应用启动后无法读取修改的配置:

详解IOptionsSnapshot

接着上面的代码,配置文件还原,修改 DemoService代码如下:

直接启动项目,发现程序启动报错。错误可以看出 IOptionsSnapshot 接口并不支持 Singleton 模式注入。

修改为 Scoped 、 Transient 注入模式可以正常运行:

接下来试试修改 appsetting.json 文件配置,重新请求接口结果如下:

可以看出 IOptionsSnapshot 不支持以Singleton模式注入,但是Transient,Scoped 模式可以正常注入,同时应用启动后可以读取修改的配置。

详解IOptionsMonitor

接着上面代码,配置文件还原,继续修改 DemoService 如下:

很明显看出 IOptionsMonitorIOptions、IOptionsSnapshot 字段略有不同,F12 看看接口定义:

除了获取当前Value 值之外,还提供了 Get、OnChange 两个方法,OnChange 方法可以监听配置的变化,修改DemoService 如下:

三种注入模式启动,结果都如下:

同样修改 appsetting.json 文件配置,保存但不去请求接口,可以看到 OnChang 事件已监听到了改动。

接下来重新请求接口,可以看到修改之后的输出:

得出结论 IOptionsMonitor 支持以Singleton、Transient,Scoped 模式注入,同时提供 OnChange 方法监听修改。

总结

结合以上示例可以清楚的分别三种接口的差别

IOptions

o应用启动后无法读取修改的配置

o可以注入到任何依赖注入周期

IOptionsSnapshot

o应用启动后可以读取修改的配置

o不支持以Singleton模式注入,Transient,Scoped 可以正常注入

IOptionsMonitor

o应用启动后可以读取修改的配置

oSingleton,Transient,Scoped 三种注入周期都可以正常注入

o同时提供 OnChange() 方法监听配置变更

另外不了解依赖注入三种注入模式的,可以查阅《详解.NET Core 依赖注入生命周期》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 麦扣聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【5min+】更好的选项实践。.Net Core中的IOptions
【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。
句幽
2020/04/27
9190
ASP.NET Core 3.0 : 二十四. 配置的Options模式
上一章讲到了配置的用法及内部处理机制,对于配置,ASP.NET Core还提供了一种Options模式。(ASP.NET Core 系列目录)
FlyLolo
2019/09/29
1K0
.Net Core 中的选项Options
.NetCore的配置选项建议结合在一起学习,不了解.NetCore 配置Configuration的同学可以看下我的上一篇文章 [.Net Core配置Configuration源码研究]
蓝夏
2021/09/09
8870
ASP.NET Core 选项
首先要了解 ASP.NET Core 中的配置,请点击这里了解:https://www.cnblogs.com/whuanle/p/13061059.html
痴者工良
2021/04/26
4010
asp.net core之Options
本文将介绍 ASP.NET Core 中的 Options 概念和使用方法。Options 是一种配置管理机制,可以将应用程序的配置信息从代码中分离出来,提高代码的可维护性和可测试性。我们将详细介绍如何定义 Options 类、注册 Options、使用 Options,并提供相应的示例代码。此外,我们还将对 IOptions、IOptionsSnapshot、IOptionsMonitor、IConfigureNamedOptions、OptionsBuilder、IValidateOptions、PostConfigureOptions 等相关接口和类进行说明,并给出使用场景示例。
饭勺oO
2023/10/18
3160
asp.net core之Options
.Net Core中的Options使用以及源码解析
在.Net Core中引入了Options这一使用配置方式,通常来讲我们会把所需要的配置通过IConfiguration对象配置成一个普通的类,并且习惯上我们会把这个类的名字后缀加上Options。所以我们在使用某一个中间件,或者使用第三方类库时,经常会看到配置对应Options的代码,例如关于Cookie的中间件就会配置CookiePolicyOptions这一个对象。
AI.NET 极客圈
2019/07/19
1.1K0
NetCore配置框架详解
这边文章主要是对netcore中的配置框架做一个实战详解,篇幅较长内容涉及比较多,请耐心阅读并进行尝试,均采用控制台程序进行展示。 环境: netcore 3.1.4 win10 vs 2019 16.5.5
xhznl
2020/09/28
8620
[ASP.NET Core 3框架揭秘] Options[5]: 依赖注入
《Options模型》介绍了组成Options模型的4个核心对象以及它们之间的交互关系,读者对如何得到Options对象的实现原理可能不太了解,本篇文章主要介绍依赖注入的相关内容。既然我们能够利用IServiceProvider对象提供的IOptions<TOptions>服务、IOptionsSnapshot<TOptions>服务和IOptionsMonitorCache<TOptions>服务来获取对应的Options对象,那么在这之前必然需要注册相应的服务。回顾《配置选项的正确使用方式》演示的几个实例可以发现,Options模式涉及的API其实不是很多,大都集中在相关服务的注册上。Options模型的核心服务实现在IServiceCollection接口的AddOptions扩展方法。
蒋金楠
2020/02/13
1.7K0
[ASP.NET Core 3框架揭秘] Options[5]: 依赖注入
.NET Core开发实战(第16课:选项数据热更新:让服务感知配置的变化)--学习笔记
延续上一节的代码,但是做一些特殊处理,之前注册 Order 服务用的是单例模式,这里改为 Scoped 模式
郑子铭
2021/01/13
6540
[ASP.NET Core 3框架揭秘] Options[1]: 配置选项的正确使用方式[上篇]
依赖注入不仅是支撑整个ASP.NET Core框架的基石,也是开发ASP.NET Core应用采用的基本编程模式,所以依赖注入十分重要。依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对象。
蒋金楠
2020/02/12
1.1K0
ASP.NET Core 选项模式源码学习Options Configure(一)
ASP.NET Core 后我们的配置变得更加轻量级了,在ASP.NET Core中,配置模型得到了显著的扩展和增强,应用程序配置可以存储在多环境变量配置中,appsettings.json用户机密等 并可以通过应用程序中的相同界面轻松访问,除此之外,ASP.NET中的新配置系统允许使用Options的强类型设置。
HueiFeng
2020/01/22
2.3K0
asp.net core选项Options模块的笔记
这篇博客是写给自己看的。已经不止一次看到AddOptions的出现,不管是在.net core源码还是别人的框架里面,都充斥着AddOptions。于是自己大概研究了下,没有深入,因为,我的功力还是不够,等能力到了再回头研究下。在这里还是要说一遍,因为DI的重要性不言而喻,不必谈的太深,说下自己的理解: 
Ryan_OVO
2023/10/19
1730
在 ASP.NET Core 中修改配置文件后自动加载新的配置
在 ASP.NET Core 默认的应用程序模板中, 配置文件的处理如下面的代码所示:
beginor
2020/08/07
2.6K0
ASP.NET Core 6框架揭秘实例演示[10]:Options基本编程模式
依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了可以采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对象,这篇文章演示几种典型的编程模式。(本篇提供的实例已经汇总到《ASP.NET Core 6框架揭秘-实例演示版》)
蒋金楠
2022/05/09
5940
ASP.NET Core 6框架揭秘实例演示[10]:Options基本编程模式
[ASP.NET Core 3框架揭秘] Options[2]: 配置选项的正确使用方式[下篇]
前面演示的几个实例具有一个共同的特征,即都采用配置系统来提供绑定Options对象的原始数据,实际上,Options框架具有一个完全独立的模型,可以称为Options模型。这个独立的Options模型本身并不依赖于配置系统,让配置系统来提供配置数据仅仅是通过Options模型的一个扩展点实现的。在很多情况下,可能并不需要将应用的配置选项定义在配置文件中,在应用启动时直接初始化可能是一种更方便快捷的方式。
蒋金楠
2020/02/12
9320
.NET 5 修改配置不重启自动生效
.NET Core,.NET 5 默认配置都是只加载一次,修改配置时都需要重启才能生效,如何能修改即时生效呢,下面来演示一遍。
沙漠尽头的狼
2021/12/01
9600
.NET 5 修改配置不重启自动生效
.net 5.0 Options组件源码解析
本文主要介绍Options组件的原理和源码解析,但是主要介绍常用的一些用法,有一些不常用的模式,本文可能会跳过,因为内容太多.
郑小超.
2022/05/07
9240
.net 5.0 Options组件源码解析
asp.net core 系列之Dependency injection(依赖注入)
ASP.NET Core支持依赖注入。这是一种在类和其依赖之间实现控制反转的一种技术(IOC).
Vincent-yuan
2019/09/11
1.6K0
asp.net core 系列之Dependency injection(依赖注入)
.NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记
2.2.3 核心模块--配置 IConfiguration Options ASP.NET Core 中的配置:https://docs.microsoft.com/zh-cn/aspnet/core
郑子铭
2020/12/16
3740
.NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记
ASP.NETCoreWeb开发之OptionsPattern
这节我们来讲一下,在ASP.NET Core Web开发中,读取配置文件信息的新方式:Options。
宿春磊Charles
2022/12/03
7360
ASP.NETCoreWeb开发之OptionsPattern
推荐阅读
相关推荐
【5min+】更好的选项实践。.Net Core中的IOptions
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文