Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ASP.NETCoreWeb开发之OptionsPattern

ASP.NETCoreWeb开发之OptionsPattern

作者头像
宿春磊Charles
发布于 2022-12-03 04:27:56
发布于 2022-12-03 04:27:56
74100
代码可运行
举报
文章被收录于专栏:DotNet 致知DotNet 致知
运行总次数:0
代码可运行

这节我们来讲一下,在ASP.NET Core Web开发中,读取配置文件信息的新方式:Options。

前言 /

Options

在ASP.NET Web框架中,我们读取配置文件中的数据,在不使用第三方框架的情况下,可能需要通过ConfigurationManager这个类去读取配置文件中的信息,并且,如果我们人为更改了配置文件,需要重启系统才能使新的配置数据生效。这种方式并不能称得上优雅和高效。

所以,在ASP.NET Core Web框架中,微软为我们提供了读取配置信息的新方式——将配置信息映射到数据类中,并且配合IOC,可以通过依赖注入的方式拿到这个类,读取我们想要的信息,下面就来了解一下它。

如何配置?/

Options

首先,我们需要如下前置信息:

  • 在appsettings.json中配置要读取的信息(如下图,此处名称“MyOptions”可自定义)
  • 对应的编写一个数据类

然后,我们就可以选择在Startup.cs中,编写配置相关代码(在Program.cs文件中也可以指定配置,具体大家可以参考官网文档),请看下图:

在ConfigureServices方法中,我们可以配置Options。方式有很多种,此处仅演示比较简单的几种。通过使用services的Configure/AddOptions泛型方法,其泛型类型为要映射的类,然后指定要读取的区域(即Section),即可完成配置。默认如果不指定SectionName,则自动使用类名进行匹配,如果读取SectionName跟映射的类名不一致,则使用其重载方法,传入SectionName即可。

IOptions<T>/

Options

在完成配置以后,就可以使用依赖注入的方式,在需要的地方获取到配置信息,注入的形式之一是IOptions<T>接口,泛型T则指定为映射的配置类,请看下图:

使用IOptions<T>注入的配置对象,不具有动态性,也就是说系统运行时修改配置文件,是不会自动更新的。所以可以在类中直接声明配置类对象,在构造方法中直接从IOptions的Value属性中取到。

让我们打印出来看一下:

这样的形式,是优雅的,面向对象的,但是在系统的整个运行过程中,使用IOptions<T>注入的配置对象,是不会随配置信息的改变而变化的,也就说,还是要重启才能看到配置信息的更改。

IOptionsSnapshot<T>/

Options

当然,除了IOptions<T>,我们还可以使用IOptionsSnapshot<T>去注入配置对象:

IOptionsSnapshot接口,提供了对配置信息的更新功能,但是并不是实时的,在同一个域或者本次请求中如果出现配置信息更改,配置对象中的数据是不会变化的,也就是保证整个上下文中的配置信息不会改变。为此,上述代码中我与IOptions做出对比,第一次请求数据两者相同,为初始值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//第 1 次请求
IOptions:name:Charles,age:18,profession:.NET Developer
IOptionsSnapshot:name:Charles,age:18,profession:.NET Developer

然后我修改配置文件,进行第二次请求,IOptionsSnapshot重新读取了配置信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//第 2 次请求
IOptions:name:Charles,age:18,profession:.NET Developer
IOptionsSnapshot:name:宿春磊,age:19,profession:.NET 开发者

IOptionsMonitor<T>/

Options

最后,除了IOptionsSnapshot,微软还提供了IOptionsMonitor,这位则是提供“全天候”的配置监控服务,配置文件一改,它就立刻更新,请看下图:

我将三者做一对比,在读取前就通过代码更新配置文件,因为OptionsPattern是延迟读取的,所以在改之前使IOptionsSnapshot读取一遍值,这样才能体现出三者的不同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//第 1 次请求
IOptions:name:宿春磊,age:19,profession:.NET 开发者
IOptionsSnapshot:name:宿春磊,age:19,profession:.NET 开发者
IOptionsMonitor:name:宿春磊Charles,age:19,profession:.NET 开发者

第二次请求的时候,IOptionsSnapshot才取到新值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//第 2 次请求
IOptions:name:宿春磊,age:19,profession:.NET 开发者
IOptionsSnapshot:name:宿春磊Charles,age:19,profession:.NET 开发者
IOptionsMonitor:name:宿春磊Charles,age:19,profession:.NET 开发者

本节到此结束...


参考:

https://docs.microsoft.com/zh-CN/dotnet/core/extensions/options

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

本文分享自 DotNet 致知 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
编辑精选文章
换一批
asp.net core之Options
本文将介绍 ASP.NET Core 中的 Options 概念和使用方法。Options 是一种配置管理机制,可以将应用程序的配置信息从代码中分离出来,提高代码的可维护性和可测试性。我们将详细介绍如何定义 Options 类、注册 Options、使用 Options,并提供相应的示例代码。此外,我们还将对 IOptions、IOptionsSnapshot、IOptionsMonitor、IConfigureNamedOptions、OptionsBuilder、IValidateOptions、PostConfigureOptions 等相关接口和类进行说明,并给出使用场景示例。
饭勺oO
2023/10/18
3250
asp.net core之Options
ASP.NET Core 选项
首先要了解 ASP.NET Core 中的配置,请点击这里了解:https://www.cnblogs.com/whuanle/p/13061059.html
痴者工良
2021/04/26
4110
[ASP.NET Core 3框架揭秘] Options[1]: 配置选项的正确使用方式[上篇]
依赖注入不仅是支撑整个ASP.NET Core框架的基石,也是开发ASP.NET Core应用采用的基本编程模式,所以依赖注入十分重要。依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对象。
蒋金楠
2020/02/12
1.1K0
ASP.NET Core 网站运行时修改设置如何自动生效
在ASP.NET Core中,如果修改了appsettings.json中的设置,那么默认情况下就得重启网站才能生效。有没有办法在修改设置后自动刷新并应用呢?
Edi Wang
2019/07/08
2.9K0
ASP.NET Core 网站运行时修改设置如何自动生效
.Net Core 中的选项Options
.NetCore的配置选项建议结合在一起学习,不了解.NetCore 配置Configuration的同学可以看下我的上一篇文章 [.Net Core配置Configuration源码研究]
蓝夏
2021/09/09
9130
在 ASP.NET Core 中修改配置文件后自动加载新的配置
在 ASP.NET Core 默认的应用程序模板中, 配置文件的处理如下面的代码所示:
beginor
2020/08/07
2.7K0
[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]: 依赖注入
【5min+】更好的选项实践。.Net Core中的IOptions
【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。
句幽
2020/04/27
9250
ASP.NET Core 3.0 : 二十四. 配置的Options模式
上一章讲到了配置的用法及内部处理机制,对于配置,ASP.NET Core还提供了一种Options模式。(ASP.NET Core 系列目录)
FlyLolo
2019/09/29
1K0
.NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记
2.2.3 核心模块--配置 IConfiguration Options ASP.NET Core 中的配置:https://docs.microsoft.com/zh-cn/aspnet/core
郑子铭
2020/12/16
3750
.NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记
.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
8670
ASP.NET Core 6框架揭秘实例演示[10]:Options基本编程模式
依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了可以采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对象,这篇文章演示几种典型的编程模式。(本篇提供的实例已经汇总到《ASP.NET Core 6框架揭秘-实例演示版》)
蒋金楠
2022/05/09
6000
ASP.NET Core 6框架揭秘实例演示[10]:Options基本编程模式
详解.NET Core 选项框架(Options)
.NET Core 引入了Options模式,使用强类型的类来表达配置项,提供了三种在不同场景下的使用接口:
心莱科技雪雁
2021/07/01
8930
ASP.NET Core快速入门(第2章:配置管理)--学习笔记
课程链接:http://video.jessetalk.cn/course/explore
郑子铭
2021/01/13
7070
ASP.NET Core快速入门(第2章:配置管理)--学习笔记
.NET 5 修改配置不重启自动生效
.NET Core,.NET 5 默认配置都是只加载一次,修改配置时都需要重启才能生效,如何能修改即时生效呢,下面来演示一遍。
沙漠尽头的狼
2021/12/01
9780
.NET 5 修改配置不重启自动生效
.NET Core开发实战(第16课:选项数据热更新:让服务感知配置的变化)--学习笔记
延续上一节的代码,但是做一些特殊处理,之前注册 Order 服务用的是单例模式,这里改为 Scoped 模式
郑子铭
2021/01/13
6630
.NET Core 读取配置文件
前面写过一篇《.NET Core类库中读取配置文件》 ,当时对于.NET Core读取配置文件了解有限,这里做下补充:
雪飞鸿
2018/09/05
3.6K0
[ASP.NET Core 3框架揭秘] Options[2]: 配置选项的正确使用方式[下篇]
前面演示的几个实例具有一个共同的特征,即都采用配置系统来提供绑定Options对象的原始数据,实际上,Options框架具有一个完全独立的模型,可以称为Options模型。这个独立的Options模型本身并不依赖于配置系统,让配置系统来提供配置数据仅仅是通过Options模型的一个扩展点实现的。在很多情况下,可能并不需要将应用的配置选项定义在配置文件中,在应用启动时直接初始化可能是一种更方便快捷的方式。
蒋金楠
2020/02/12
9530
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
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验