前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解.NET Core 选项框架(Options)

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

作者头像
心莱科技雪雁
发布2021-07-01 09:48:12
6720
发布2021-07-01 09:48:12
举报

前言

.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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 代码示例
    • 前期准备
      • 详解IOptions
        • 详解IOptionsSnapshot
          • 详解IOptionsMonitor
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档