ASP.NET Core 选项
首先要了解 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 选项的更多相关文章
- ASP.NET Core - 选项系统之选项使用
上一篇 ASP.NET Core - 选项系统之选项配置 中提到 IOptions.IOptionsMonitor 和 IOptionsSnapshot 三个接口,通过这三个接口都可以从依赖注入容器中 ...
- ASP.NET Core - 选项系统之选项验证
就像 Web Api 接口可以对入参进行验证,避免用户传入非法的或者不符合我们预期的参数一样,选项也可以对配置源的内容进行验证,避免配置中的值与选项类中的属性不对应或者不满足预期,毕竟大部分配置都 ...
- ASP.NET Core - 选项系统之源码介绍
.NET Core 选项系统的主要实现在 Microsoft.Extensions.Options 和 Microsoft.Extensions.Options.ConfigurationExtens ...
- asp.net core选项Options模块的笔记
这篇博客是写给自己看的.已经不止一次看到AddOptions的出现,不管是在.net core源码还是别人的框架里面,都充斥着AddOptions.于是自己大概研究了下,没有深入,因为,我的功力还是不 ...
- 理解ASP.NET Core - 选项(Options)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 Options绑定 上期我们已经聊过了配置(IConfiguration),今天我们来聊一聊O ...
- ASP.NET Core 选项模式源码学习Options Configure(一)
前言 ASP.NET Core 后我们的配置变得更加轻量级了,在ASP.NET Core中,配置模型得到了显著的扩展和增强,应用程序配置可以存储在多环境变量配置中,appsettings.json用户 ...
- asp.net core选项配置的研究
asp.net-core选项模块是全新,可拓展的框架,其作用在整个.net-core框架中,就像依赖注入一样无处不在,是一个很重要的组件. 其实配置模块与选项模块是紧密相连的,我们可以使用Config ...
- ASP.NET Core 选项模式源码学习Options IOptionsMonitor(三)
前言 IOptionsMonitor 是一种单一示例服务,可随时检索当前选项值,这在单一实例依赖项中尤其有用.IOptionsMonitor用于检索选项并管理TOption实例的选项通知, IOpti ...
- Asp.Net Core 选项模式的三种注入方式
前言 记录下最近在成都的面试题, 选项模式的热更新, 没答上来 正文 选项模式的依赖注入共有三种接口, 分别是 IOptions<>, IOptionsSnapshot<>, ...
- ASP.NET Core 选项模式源码学习Options IOptions(二)
前言 上一篇文章介绍IOptions的注册,本章我们继续往下看 IOptions IOptions是一个接口里面只有一个Values属性,该接口通过OptionsManager实现 public in ...
随机推荐
- 【DS】P9062 [Ynoi2002] Adaptive Hsearch&Lsearch(区间最近点对)
Problem Link 给定平面上 \(n\) 个点,\(Q\) 次询问编号在 \([l,r]\) 内的点的最近点对.\(n,Q\le 2.5\times 10^5\). 技巧:平面网格化 乱搞都是 ...
- Fabric-ca server端与client端交互
本文介绍Fabric-ca server端和client端的交互过程. 在server端执行Start()命令时,会调用registerHandlers()函数,其作用就是注册处理客户端请求的程序: ...
- python处理Excel实现自动化办公教学(含实战)【一】
相关文章: python处理Excel实现自动化办公教学(含实战)[一] python处理Excel实现自动化办公教学(含实战)[二] python处理Excel实现自动化办公教学(数据筛选.公式操作 ...
- Python自动化办公--Pandas玩转Excel数据分析【三】
相关文章: Python自动化办公--Pandas玩转Excel[一] Python自动化办公--Pandas玩转Excel数据分析[二] python处理Excel实现自动化办公教学(含实战)[一] ...
- [Go] string、int、int64相互转换
import "strconv" //先导入strconv包 // string到int int, err := strconv.Atoi(string) // string到in ...
- Node工程使用云服务器中的redis镜像做数据库
Redis镜像安装 在云服务器中执行指令 docker pull redis 添加redis镜像实例的配置 [root@VM-0-11-centos ~]# cd /home [root@VM-0 ...
- 关于debug一晚上的一些思考,做开发到底要养成什么习惯?
总结:日志一定要写,日志一定要写,日志一定要写! 今天晚上是我学开发过程中很不一样的一晚,今晚学到了很多. 虽然我也只是一个开发的初学小白,今天的debug分享是我的一个小方法和一个小记录,如果大佬们 ...
- (python)学习ing||类学习,@property装饰器
class pers(): def __init__(self,hp): self._hp=hp @property def hp(self): return self._hp @hp.setter ...
- MyBatis踩坑之单字符条件比较
背景 Mybatis中可以使用 <choose><when>...</when></choose> 语句来实现条件选择,<when> 标签含 ...
- 使用 .NET 8.0 和 OpenGL 创建一个简易的渲染器
前言我个人对三维渲染领域的开发有着浓厚的兴趣,尽管并未在相关行业工作过,我的了解还很片面.去年,在与群友聊天时,他们推荐了一本<Unity Shader入门精要>,说适合像我这样想自学的新 ...