首先要了解 ASP.NET Core 中的配置,请点击这里了解:https://www.cnblogs.com/whuanle/p/13061059.html

1,选项接口

ASP.NET Core 中的选项接口,一共有三个,分别是:

  • IOptions<TOptions>
  • IOptionsSnapshot<TOptions>
  • IOptionsMonitor<TOptions>

这三种方式都可以获取到配置,区别在于生命周期和文件监控等。

2,注入配置与IOptions

首先我们创建一个 ASP.NET Core API 项目,添加一个 test.json 文件,内容如下:

{
"Title": "测试",
"Name": "测试测试"
}

再创建一个与之对应的模型类:

    public class TestModel
{
public string Title { get; set; }
public string Name { get; set; }
}

然后在 Startup 的 ConfigureServices 方法中加上:

            services.Configure<TestModel>(new ConfigurationBuilder().AddJsonFile("test.json").Build());

这样就可以自动注入配置服务了。那么我们如何接收这个配置呢?

我们可以先使用 IOptions<T> 来接收。

添加一个控制器,名字随意,其内容如下:

    public class TestController : ControllerBase
{
private readonly TestModel _options;
public TestController(IOptions<TestModel> options)
{
_options = options.Value;
}
}

这样就可以接收接入的配置了。

这就是 IOptions<TOptions> 的使用。

IOptions<TOptions> 有以下特征:

不支持:

  • 在应用启动后读取配置数据。
  • 命名选项

    可以:
  • 注册为单一实例且可以注入到任何服务生存期。

也就是说,在应用启动前就已经读取配置文件生成对象(单一实例)。当然,后续如果修改了配置文件(.json),也不会影响这个对象的。

3,IOptionsSnapshot

文档解释:通过使用 IOptionsSnapshot<TOptions>,针对请求生存期访问和缓存选项时,每个请求都会计算一次选项。

IOptionsSnapshot 的生命作用域是 scoped ,在一个请求周期内有效。

其它不变,使用时:

        private readonly TestModel _options;
public TestController(IOptionsSnapshot<TestModel> options)
{
_options = options.Value;
}

由于 IOptionsSnapshot 每次请求都会进行更新,因此配置文件变更后,可以及时获得更新。

IOptionsMonitor 则略有不同:

    public class TestController : ControllerBase
{
private readonly IOptionsMonitor<TestModel> _options;
public TestController(IOptionsMonitor<TestModel> options)
{
_options = options;
}
[HttpGet("T")]
public ContentResult T()
{ return new ContentResult()
{
Content = _options.CurrentValue.Title
};
}
}

IOptionsSnapshot 和 IOptionsMonitor 都可以检测到配置文件的更改,但是 IOptionsSnapshot 每次请求都是一个新的对象,而 IOptionsMonitor 是单例模式。

ASP.NET Core 选项的更多相关文章

  1. ASP.NET Core - 选项系统之选项使用

    上一篇 ASP.NET Core - 选项系统之选项配置 中提到 IOptions.IOptionsMonitor 和 IOptionsSnapshot 三个接口,通过这三个接口都可以从依赖注入容器中 ...

  2. ASP.NET Core - 选项系统之选项验证

      就像 Web Api 接口可以对入参进行验证,避免用户传入非法的或者不符合我们预期的参数一样,选项也可以对配置源的内容进行验证,避免配置中的值与选项类中的属性不对应或者不满足预期,毕竟大部分配置都 ...

  3. ASP.NET Core - 选项系统之源码介绍

    .NET Core 选项系统的主要实现在 Microsoft.Extensions.Options 和 Microsoft.Extensions.Options.ConfigurationExtens ...

  4. asp.net core选项Options模块的笔记

    这篇博客是写给自己看的.已经不止一次看到AddOptions的出现,不管是在.net core源码还是别人的框架里面,都充斥着AddOptions.于是自己大概研究了下,没有深入,因为,我的功力还是不 ...

  5. 理解ASP.NET Core - 选项(Options)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 Options绑定 上期我们已经聊过了配置(IConfiguration),今天我们来聊一聊O ...

  6. ASP.NET Core 选项模式源码学习Options Configure(一)

    前言 ASP.NET Core 后我们的配置变得更加轻量级了,在ASP.NET Core中,配置模型得到了显著的扩展和增强,应用程序配置可以存储在多环境变量配置中,appsettings.json用户 ...

  7. asp.net core选项配置的研究

    asp.net-core选项模块是全新,可拓展的框架,其作用在整个.net-core框架中,就像依赖注入一样无处不在,是一个很重要的组件. 其实配置模块与选项模块是紧密相连的,我们可以使用Config ...

  8. ASP.NET Core 选项模式源码学习Options IOptionsMonitor(三)

    前言 IOptionsMonitor 是一种单一示例服务,可随时检索当前选项值,这在单一实例依赖项中尤其有用.IOptionsMonitor用于检索选项并管理TOption实例的选项通知, IOpti ...

  9. Asp.Net Core 选项模式的三种注入方式

    前言 记录下最近在成都的面试题, 选项模式的热更新, 没答上来 正文 选项模式的依赖注入共有三种接口, 分别是 IOptions<>, IOptionsSnapshot<>, ...

  10. ASP.NET Core 选项模式源码学习Options IOptions(二)

    前言 上一篇文章介绍IOptions的注册,本章我们继续往下看 IOptions IOptions是一个接口里面只有一个Values属性,该接口通过OptionsManager实现 public in ...

随机推荐

  1. 说透IO多路复用模型

    作者:京东零售 石朝阳 在说IO多路复用模型之前,我们先来大致了解下Linux文件系统.在Linux系统中,不论是你的鼠标,键盘,还是打印机,甚至于连接到本机的socket client端,都是以文件 ...

  2. R2M分布式锁原理及实践

    作者:京东科技 张石磊 1 案例引入 名词简介: 资源:可以理解为一条内容,或者图+文字+链接的载体. 档位ID: 资源的分类组,资源必须归属于档位. 问题描述:当同一个档位下2条资源同时审批通过时, ...

  3. 【K哥爬虫普法】淘宝一亿快递信息泄漏,有人正在盯着你的网购!

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  4. C# MVC+NHibernate 分页

    一.页面代码,分为三部分,一是查询条件部分,二是数据部分,二是页码条 <div id="ticketoutquery"> <table> <tr> ...

  5. 分页sql大全

    一.排除Top分页法(自命名,非规范) 思想:所谓"排除Top分页",主要依靠"排除"和Top这个两大核心步骤.首先查询当前页码之前的数据,然后将该数据从总数据 ...

  6. ElasticSearch安装、插件介绍及Kibana的安装与使用详解

    ElasticSearch安装.插件介绍及Kibana的安装与使用详解 1.安装 ElasticSearch 1.1 安装 JDK 环境 因为 ElasticSearch 是用 Java 语言编写的, ...

  7. 4.5 C++ Boost 文件目录操作库

    Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量.可移植.高效的C应用程序.Boost库可以作为标准C库的后备,通常被称为准标准 ...

  8. Python 实现SynFlood洪水攻击

    Syn-Flood攻击属于TCP攻击,Flood类攻击中最常见,危害最大的是Syn-Flood攻击,也是历史最悠久的攻击之一,该攻击属于半开放攻击,攻击实现原理就是通过发送大量半连接状态的数据包,从而 ...

  9. KMP 学习笔记

    前言-- \(char\) 与 \(string\) 有的时候 \(char\) 数组确实比 \(string\) 好用,且字符串长度很大时 \(string\) 会被卡掉,所以不要犯懒,老实用 \( ...

  10. P9549 「PHOI-1」路虽远 题解

    题目链接:路虽远 带限制的 dijkstra,优先考虑有哪些限制条件,当做类似 dp 去写.闯黄灯次数有要求,限制速度的边数量有要求. 我们注意到,如果选择哪些边限速不易于基于贪心选择,可以考虑转换下 ...