Asp.Net Core Options模式的知识总结
Options模式是Asp.Net Core中用于配置的一种模式,它利用了系统的依赖注入,并且还可以利用配置系统。它使我们可以采用依赖注入的方法直接使用绑定的一个POCO对象,这个POCO对象就叫做Options对象。也可以叫做配置对象。
Options模式中的核心对象如下:
IOptions<TOptins>:非具名,它代表了系统中同一种类的POCO配置对象。在系统中是singleton,应用级别的注入。
IOptionsSnapshot<TOptions>:具名,它用名称代表了某一个具体的配置对象。从名字可以看出它能实时的捕获到配置对象的变化。在系统中是Scope,请求级别的注入。
IOptionsFactory<TOptions>:工厂,创建TOptions的工厂。在系统中是Transient。即用即弃。
IOptionsMonitorCache<TOptinos>:缓存,工厂创建的对象会被放到缓存中。在系统中是Singleton,应用级别的注入。
OptionsManager<TOptions>
这个类是IOptinos和IOptionsSnapshot这两个接口的默认实现。
这个类的构造函数需要传入IOptionsFactory<TOptions>。随后,还会在内部自创建一个实现了IOptinsMonitorCache的对象(OptionsCache)。OptionsManager本身是用来提供TOptions实例的,它内部又依赖IOptionsFactory这个工厂对象来创建对象。factory创建好的对象放到它内部的自创建的这个缓存上面。以独占的方式来对Toptions对象进行缓存。
原理上,IOptions表示的是不具名对象,IOptionsSnapshot接口表示的具名对象,但是在他们两个的实现OptionsManager中都是调用的同一个方法,只不过Ioptions提供了一个空字符串来表示不具名。在OptionsManager内部最终会调用Get方法来获取TOptions对象.
IOptinsFactory
默认的实现是OptionsFactory。接口有一个Create方法,接受一个string name参数,OptionsFactory提供Toptions对象总的来说有两个过程,TOptions的实例化和TOptinos的初始化。实例化的过程就是直接new 了一个TOptions对象,因为在接口约束里面对TOptions有new()约束,所以可以直接new出来这个对象,而初始化的过程是由三个接口来提供实现的,这三个接口分别是
①IConfigureOptions<in TOptions>
②IConfigureNamedOptions<in TOptins>:IConfigureOptions<TOptions> 注:它继承了IConfigureOptions接口。
③IPostConfigureOptions<in Toptions>
初始化的顺序为先执行①和②,再执行③。
这三个接口是在Service.Configure<TOptions>(this IServiceCollection services,string name,Action<Toptions> configureOptions) where TOptions:class这个扩展方法中进行配置的,最终,会调用services.AddSingleton<IConfigureOptions<Toptions>>(new ConfigureNamedOptions<Toptions>(name,configureOptions));这个方法,注册一个应用级别的服务。ConfigureNamedOptions实现了IConfigureOptions和IConfigureNamedOptions这两个接口。
Asp.Net Core Options模式的知识总结的更多相关文章
- ASP.NET Core 选项模式源码学习Options Configure(一)
前言 ASP.NET Core 后我们的配置变得更加轻量级了,在ASP.NET Core中,配置模型得到了显著的扩展和增强,应用程序配置可以存储在多环境变量配置中,appsettings.json用户 ...
- ASP.NET Core 2.2 基础知识(十八) 托管和部署 概述
为了方便演示,以 .NET Core 控制台应用程序讲解. 我们新建一个控制台应用程序,安装 "Newtonsoft.Json" Nuget 包,然后右键点击该项目,选择" ...
- ASP.NET Core 2.2 基础知识(十四) WebAPI Action返回类型(未完待续)
要啥自行车,直接看手表 //返回基元类型 public string Get() { return "hello world"; } //返回复杂类型 public Person ...
- ASP.NET Core 2.2 基础知识(十三) WebAPI 概述
我们先创建一个 WebAPI 项目,看看官方给的模板到底有哪些东西 官方给出的模板: [Route("api/[controller]")] [ApiController] pub ...
- ASP.NET Core 2.2 基础知识(十二) 发送 HTTP 请求
可以注册 IHttpClientFactory 并将其用于配置和创建应用中的 HttpClient 实例. 这能带来以下好处: 提供一个中心位置,用于命名和配置逻辑 HttpClient 实例. 例如 ...
- ASP.NET Core 2.2 基础知识(十一) ASP.NET Core 模块
ASP.NET Core 应用与进程内的 HTTP 服务器实现一起运行.该服务器实现侦听 HTTP 请求,并在一系列请求功能被写到 HttpContext 时,将这些请求展现到应用中. ASP.NET ...
- ASP.NET Core 2.2 基础知识(十) Web服务器 - Kestrel
ASP.NET Core 应用与进程内的 HTTP 服务器实现一起运行.该服务器实现侦听 HTTP 请求,并在一系列请求功能被写到 HttpContext 时,将这些请求展现到应用中. ASP.NET ...
- ASP.NET Core 2.2 基础知识(六) 配置(内含MySql+EF)
先上一段代码,了解一下 .NET Core 配置数据的结构. 新建一个 控制台项目,添加一个文件 json.json ,文件内容如下: { "country": "cn& ...
- ASP.NET Core 2.2 基础知识(四) URL重写中间件
说到URL重写就不得不提URL重定向. URL重定向 URL重定向是客户端操作,指示客户端访问另一个地址的资源.这需要往返服务器,并且当客户端对资源发出请求时,返回客户端的重定向URL会出现在浏览器的 ...
随机推荐
- .net core 使用IIS作为宿主Web服务器,部署常见问题
ASP.NET Core 使用IIS作为Web服务器,部署在IIS上 所做的步骤部署完毕后,启动网站 出现 An error occurred while starting the applicati ...
- 数据结构系列(4)之 B 树
本文将主要讲述另一种树形结构,B 树:B 树是一种多路平衡查找树,但是可以将其理解为是由二叉查找树合并而来:它主要用于在不同存储介质之间查找数据的时候,减少 I/O 次数(因为一次读一个节点,可以读取 ...
- Springboot 系列(七)Spring Boot web 开发之异常错误处理机制剖析
前言 相信大家在刚开始体验 Springboot 的时候一定会经常碰到这个页面,也就是访问一个不存在的页面的默认返回页面. 如果是其他客户端请求,如接口测试工具,会默认返回JSON数据. { &quo ...
- 基于vue.js的简单用户管理
功能描述:添加.修改.搜索过滤 效果图: <!DOCTYPE html> <html lang="en"> <head> <title&g ...
- 使用原生php爬取图片并保存到本地
通过一个简单的例子复习一下几个php函数的用法 用到的函数或知识点 curl 发送网络请求 preg_match 正则匹配 代码 $url = 'http://desk.zol.com.cn/bizh ...
- 20190329-盒尺寸、boder-
目录 1.盒尺寸四家庭 width:宽度 height:高度 margin:外边距 padding:内边距 盒模型: 2.border边框 border简写:border-position(top | ...
- Android为TV端助力 listview与recyclerview上下联动
首先是主布局fragment里面的xml文件 <?xml version="1.0" encoding="utf-8"?><RelativeL ...
- delphi中WMI的使用(网卡是否接入)
WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术:用户可以使用 WMI 管理本地和远程计算机. 通过使用W ...
- Unity切换到安卓平台Shader丢失(opengl)
Unity安卓平台shader平台丢失 Unity的工程切换到Android平台后,运行游戏出现shader丢失 解决办法:在Unity桌面图标的快捷方式后添加 -force-gles20 示例:&q ...
- VS Code常用快捷键大全
常用 General 按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick O ...