这是一位朋友问我的问题,写篇随笔回答一下。有2种方法,一种叫丑陋的方法 —— IConfiguration ,一种叫优雅的方法 —— IOptions 。

1)先看丑陋的方法

比如在 RedisClient 中需要读取 appsettings.json 中的 redis 连接字符串:

{"redis": {"ConnectionString": "xxx"}
}

需要在 RedisClient 的构造函数参数中添加 IConfiguration 接口,并通过它直接读取:

public class RedisClient
{private readonly string _connectionString;public RedisClient(IConfiguration configuration){_connectionString = configuration.GetSection("redis")["ConnectionString"];}
}

然后在 Startup 的 ConfigureServices() 方法中进行注入:

public IConfigurationRoot Configuration { get; }public void ConfigureServices(IServiceCollection services)
{services.AddSingleton<IConfiguration>(Configuration);
}

2)接着看优雅的方法

首先定义一个存放连接字符串的配置类 RedisOptions :

public class RedisOptions
{public string ConnectionString { get; set; }
}

然后给 RedisClient 的构造函数参数中添加 IOptions<RedisOptions> 接口,通过 IOptions<RedisOptions> 读取配置,RedisClient 无需关心 appsettings.json :

public class RedisClient
{private readonly RedisOptions _redisOptions;public RedisClient(IOptions<RedisOptions> redisOptions){_redisOptions = redisOptions.Value;}
}

而 appsettings.json 中的配置可以在 Startup 的 ConfigureServices() 中注入进去:

services.AddOptions();
services.Configure<RedisOptions>(Configuration.GetSection("redis"));

(注:使用上面的 Configure 方法需要安装 nuget 包 Microsoft.Extensions.Options.ConfigurationExtensions )

作为类库的设计者,你可以更贴心些,写个扩展方法进行上面的注入操作。

转载于:https://www.cnblogs.com/dudu/p/6828045.html

.NET Core类库项目中如何读取appsettings.json中的配置相关推荐

  1. C#net6控制台程序中读取appsettings.json

    C#net6控制台程序中读取appsettings.json 背景 具体实现 使用方法 背景 我们知道,在原来.netframework平台下的控制台程序配置文件为App.config,微软推出跨平台 ...

  2. dataframe数组做元素_大数据技术之使用 DataFrame 读取复杂 JSON 中的嵌套数组

    本篇教程探讨了大数据技术之使用 DataFrame 读取复杂 JSON 中的嵌套数组,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入. 众所周知,在早期Spark版本中就已经支持 ...

  3. spark中读取json_【Spark】使用DataFrame读取复杂JSON中的嵌套数组

    众所周知,在早期Spark版本中就已经支持读取Json格式的数据文件,并能够直接转换为数据库表,以方便我们进行处理数据,在本篇文章中我们将介绍如何通过Spark API很简单地读取Json数据,并进一 ...

  4. net core 2 读取appsettings.json

    问: .Net Core: Application startup exception: System.IO.FileNotFoundException: The configuration file ...

  5. linux上jar包无法识别本地文件格式,解决使用maven将项目打包成jar包后运行在linux系统中无法读取jar包中文件的问题...

    哈哈,之前计划的每周至少更新一个博客的计划又因为各种原因都泡汤了.看来坚持真得是一件挺让人头疼的问题,无论如何,从这周开始接下来每周一定要至少更新一个技术博客,欢迎大家监督! 好,言归正传.之前前几周 ...

  6. Winform中实现读取xml配置文件并动态配置DevExpress的RadioGroup的选项

    场景 Winform中对DevExpress的RadioGroup进行数据源绑定,即通过代码添加选项: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/articl ...

  7. java 解析dat_JAVA中怎么读取DAT文件中的内容

    匿名用户 1级 2016-12-23 回答 DAT估计是个二进制 或者文本 跟普通读取文件是一样的 读取上来 你再对文件格式进行拆分 首先你要了解 它的格式是什么  你可以用 NOTEPAD++或者  ...

  8. Python中numpy读取高维数组中特定的行,列

    直接跑代码,看懂代码,跑一遍,你自然懂了. ''' 多维矩阵按括号的层级,从外向内,一次是第1,2,3,...维b[]内用逗号将各维分开,分别代表第1,2,3...维元素 逗号把数组分成两维度,左边是 ...

  9. linux中recvfrom读取速度,Linux中的select、sendto、recvfrom的系统开销

    未完成 测试环境为8核Intel Core i7 860 2.8GHz,内存8Gb 1333MHz,网卡是100Mbps.内核版本2.6.18. 下面的统计都是使用long sys_clock_get ...

最新文章

  1. HUD 5687(字典树)
  2. python朋友圈为什么这么火-看我如何用Python发一个高逼格的朋友圈
  3. mysql 22001_mysql ERROR 1264 (22003): Out of range value for column 'x' at row 1 错误
  4. 关于 项目中Ioc基础模块 的搭建 (已适用于.net core / .net Framework / Nancy)
  5. label y 训练集测试集x_训练集、测试集 train_test_split
  6. c语言创建一个顺序表主函数,用C语言来创建一个顺序表(数据结构部分)
  7. mysql快速批量入库_MySQL-批量入库优化
  8. 多功能拼团商城源码-带优惠券功能+自适应移动端+对接免签约支付
  9. MySQL数据库和表名大小写敏感开关的打开办法
  10. 【预告】火星人敏捷开发手册(免费敏捷教材及宣传材料预览)
  11. Win7 AERO主题变成灰色解决方法
  12. 人社部《专项职业能力证书》如何考取!含金量!证书效力!
  13. 传奇服务器端回满血文件,单机架设传奇服务器第八课:血过65535
  14. 请说一下你是如何理解互联网思维的?
  15. 上海学车科目二,科目三容易扣分点分享,你了解多少
  16. Tableau-旭日图(详细操作步骤)
  17. matlab信号内插,【 MATLAB 】MATLAB 实现模拟信号采样后的重建(三)应用三次样条函数spline实现内插...
  18. 【Matlab】如何使用Simulink进行电池建模和SOC预估
  19. c代码-一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  20. 怎么把foxmail的邮件和服务器同步,foxmail客户端导入邮件但是网页端没有同步,怎么处理呢[foxmail]-上海腾曦网络...

热门文章

  1. SQL2008修改并保存表结构时报错的解决(阻止保存要求重新创建表的更改)
  2. 基于sharepoint 2003的内容管理1.0
  3. 是时候搞清楚 Spring Boot 的配置文件 application.properties 了!
  4. DS博客作业05--树
  5. LeetCode第 146 号问题: LRU 缓存机制
  6. Python: translate()审查清理文本字符串
  7. 《Linux嵌入式实时应用开发实战(原书第3版)》——3.5 Linux文件系统
  8. Android核心基础第八天
  9. QQ交流群,欢迎有兴趣的同学加入。
  10. OC底层原理之Runtime