我只发现IOptions的一个用处——方便了在.NET Core应用程序中使用强类型配置。

如果没有IOptions,使用强类型配置需要自己解决下面2个问题:

1)将配置文件(比如appsettings.json)中的配置反序列化至配置类的实例中

2)注入配置类的单例

如果有了IOptions,可以通过  Configure<TOptions>(IConfiguration config)  或  Configure<TOptions>(Action<TOptions> configureOptions) 扩展方法一次搞定上面2个问题。

下面看一个例子,我们在将阿里大于的.NET客户端TopSdk迁移至.NET Core时,想实现通过appsettings.json对客户端进行配置。

{
"topClient": {
"serverUrl": "",
"appKey": "",
"appSecret": ""
}
}

为此定义了一个配置类TopClientOptions:

public class TopClientOptions
{
public string ServerUrl { get; set; }
public string AppKey { get; set; }
public string AppSecret { get; set; }
}

然后通过在Startup的ConfigureServices()添加下面的代码,就可以将appsettings.json中的配置绑定到TopClientOptions的实例,并完成依赖注入。

services.AddOptions();
services.Configure<TopClientOptions>(Configuration.GetSection("topClient"));

(注:需要安装NuGet包 Microsoft.Extensions.Options.ConfigurationExtensions )

在需要读取TopClientOptions中配置的地方只需通过构造函数注入即可:

public class DefaultTopClient : ITopClient
{
public DefaultTopClient(IOptions<TopClientOptions> options)
{
}

相关随笔:.NET Core类库项目中如何读取appsettings.json中的配置

.NET Core 中 IOptions 有什么用的更多相关文章

  1. ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化

    原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...

  2. [翻译] 如何在 ASP.Net Core 中使用 Consul 来存储配置

    [翻译] 如何在 ASP.Net Core 中使用 Consul 来存储配置 原文: USING CONSUL FOR STORING THE CONFIGURATION IN ASP.NET COR ...

  3. Asp.net Core中使用Redis 来保存Session, 读取配置文件

    今天 无意看到Asp.net Core中使用Session ,首先要使用Session就必须添加Microsoft.AspNetCore.Session包,默认Session是只能存去字节,所以如果你 ...

  4. Asp.net core中的依赖注入

    使用服务 在Asp.net core的Controller中,可以通过如下两种方式获取系统注入的服务: 构造函数 可以直接在构造函数中传入所依赖的服务,这是非常常见的DI注入方式. public Va ...

  5. .NET Core中使用RabbitMQ正确方式

    .NET Core中使用RabbitMQ正确方式 首先甩官网:http://www.rabbitmq.com/ 然后是.NET Client链接:http://www.rabbitmq.com/dot ...

  6. Net Core 中使用 Consul 来存储配置

    Net Core 中使用 Consul 来存储配置 https://www.cnblogs.com/Rwing/p/consul-configuration-aspnet-core.html 原文: ...

  7. Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)

    QuartzHostedService  是一个用来在Asp.Net Core 中实现 Quartz 的任务注入依赖的nuget 包: 基本示例如下: using System; using Syst ...

  8. 在.NET Core中使用Jwt对API进行认证

    在.NET Core中想用给API进行安全认证,最简单的无非就是Jwt,悠然记得一年前写的Jwt Demo,现在拿回来改成.NET Core的,但是在编码上的改变并不大,因为Jwt已经足够强大了.在项 ...

  9. 文章翻译:ABP如何在EF core中添加数据过滤器

    原文地址:https://aspnetboilerplate.com/Pages/Documents/Articles%5CHow-To%5Cadd-custom-data-filter-ef-cor ...

随机推荐

  1. WCF系列(六) - WCF安全系列(一) - basicHttpBinding

    绑定可指定在与终结点通话时所使用的通信机制,并指示如何连接到终结点.绑定由一些元素组成,这些元素指定如何对 Windows Communication Foundation (WCF) 通道进行分层以 ...

  2. 12C -- 创建RMAN备份用户

    1.NON-CDB环境 SQL> create user backup_admin identified by backup_admin default tablespace users; SQ ...

  3. openssl - X509证书操作函数

    原文链接: http://blog.csdn.net/zqt520/article/details/26965797 现有的证书大都采用X.509规范,主要同以下信息组成:版本号.证书序列号.有效期. ...

  4. 第三部分:Android 应用程序接口指南---第二节:UI---第四章 Action Bar

    第4章 Action Bar Action Bar是一个能用于确定应用程序和用户的位置,并提供给用户操作和导航模式的窗口功能.如果需要显著地展示当前用户的操作或导航,应该使用Action Bar,因为 ...

  5. HeroKu PaaS模式

    从HeroKu的官网看到一副流程图,演示了其提倡的应用构建通道,让包括个人开发者.创业团队.乃至各种规模的业务都能以自己的方式使用它,剩下的就是交给用户去开发出优秀的应用. 在开发者和应用的用户之间, ...

  6. mac通过路径找到对应的文件夹

    在finder中 command + shift + G 跳出窗口中输入指定的路径,即可到达.

  7. 解决:github上传时出现error: src refspec master does not match any

    原因分析 引起该错误的原因是,目录中没有文件,空目录是不能提交上去的 解决方法 touch README git add README git commit -m 'first commit' git ...

  8. React Native常用组件之ScrollView

    1. 两个要点 1.1 ScrollView必须有一个确定的高度才能正常工作 它实际上所做的就是将一系列不确定高度的子组件装进一个确定高度的容器(通过滚动操作) 通常有两种做法: 第一种: 直接给该S ...

  9. Java知多少(79)哈希表及其应用

    哈希表也称为散列表,是用来存储群体对象的集合类结构. 什么是哈希表 数组和向量都可以存储对象,但对象的存储位置是随机的,也就是说对象本身与其存储位置之间没有必然的联系.当要查找一个对象时,只能以某种顺 ...

  10. Tomcat -- 启动错误 -- 解决锦集

    java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter :在Tomacat7的context.xml文 ...