给 IConfiguration 写一个 GetAppSetting 扩展方法

Intro

在 .net core 中,微软已经默认使用 appsettings.json 来代替 app.config,并重新设计了一套完整的配置系统,可以支持 json/xml/ini/环境变量等。

在 .net core 中有一个 GetConnectionString 的扩展方法用来比较方便的获取链接字符串,类似于在 .net framework 中使用 ConfigurationManager.ConnectionStrings["key"] 来获取链接字符串。

这次来参考 GetConnectionString 实现一个 GetAppSetting,类似于 .net framework 中使用 ConfigurationManager.AppSettings 来获取配置值。

实现代码

GetConnectionString 是获取 ConnectionStrings 这个节点下的某个配置, GetAppSetting 来获取 AppSettings 这个节点下的某个配置

实现代码:

  1. /// <summary>

  2. /// GetAppSetting

  3. /// Shorthand for GetSection("AppSettings")[key]

  4. /// </summary>

  5. /// <param name="configuration">IConfiguration instance</param>

  6. /// <param name="key">appSettings key</param>

  7. /// <returns>app setting value</returns>

  8. public static string GetAppSetting([NotNull]this IConfiguration configuration, string key)

  9. {

  10. return configuration.GetSection("AppSettings")[key];

  11. }

  12. /// <summary>

  13. /// GetAppSetting

  14. /// Shorthand for GetSection("AppSettings")[key]

  15. /// </summary>

  16. /// <param name="configuration">IConfiguration instance</param>

  17. /// <param name="key">appSettings key</param>

  18. /// <returns>app setting value</returns>

  19. public static T GetAppSetting<T>([NotNull]this IConfiguration configuration, string key)

  20. {

  21. return configuration.GetSection("AppSettings")[key].To<T>();

  22. }

  23. /// <summary>

  24. /// GetAppSetting

  25. /// Shorthand for GetSection("AppSettings")[key]

  26. /// </summary>

  27. /// <param name="configuration">IConfiguration instance</param>

  28. /// <param name="key">appSettings key</param>

  29. /// <param name="defaultValue">default value if not exist</param>

  30. /// <returns>app setting value</returns>

  31. public static T GetAppSetting<T>([NotNull] this IConfiguration configuration, string key, T defaultValue)

  32. {

  33. return configuration.GetSection("AppSettings")[key].ToOrDefault(defaultValue);

  34. }

  35. /// <summary>

  36. /// GetAppSetting

  37. /// Shorthand for GetSection("AppSettings")[key]

  38. /// </summary>

  39. /// <param name="configuration">IConfiguration instance</param>

  40. /// <param name="key">appSettings key</param>

  41. /// <param name="defaultValueFunc">default value func if not exist to get a default value</param>

  42. /// <returns>app setting value</returns>

  43. public static T GetAppSetting<T>([NotNull] this IConfiguration configuration, string key, Func<T> defaultValueFunc)

  44. {

  45. return configuration.GetSection("AppSettings")[key].ToOrDefault(defaultValueFunc);

  46. }

查看源码

使用

使用起来和 GetConnectionString 差不多

测试 appsettings.json

  1. {

  2. "ConnectionStrings": {

  3. "TestDb": "server=.;database=Test;uid=weihanli;pwd=Admin888"

  4. },

  5. "AppSettings":{

  6. "Number": 12,

  7. "City": "Shanghai"

  8. }

  9. }

GetAppSetting 示例

  1. IConfiguration configuration = new ConfigurationBuilder()

  2. // ...

  3. .AddJsonFile("appsettings.json")

  4. .Build();

  5. var city = configuration.GetAppSetting("City");

  6. var number = configuration.GetAppSetting<int>("Number");

  7. System.Console.WriteLine($"City:{city}, Number:{number}");

给 IConfiguration 写一个 GetAppSetting 扩展方法相关推荐

  1. appsetting mysql_给IConfiguration写一个GetAppSetting扩展方法(示例代码)

    给 IConfiguration 写一个 GetAppSetting 扩展方法 Intro 在 .net core 中,微软已经默认使用 appsettings.json 来代替 app.config ...

  2. [js] 手写一个trim()的方法

    [js] 手写一个trim()的方法 function trim(str) { if (str[0] === ' ' && str[str.length - 1] === ' ') { ...

  3. 简单几步写一个laravel扩展包

    为什么80%的码农都做不了架构师?>>>    laravel使用composer来管理扩展包,理解composer和laravel的开发模式,可以通过简单的几个步骤,快速写出一个l ...

  4. 跟我一起写一个chrome扩展程序

    在我没有看这本书之前,我都想象不到,原来chrome扩展程序可以这样写,真的非常有意思. 就是用最简单最基础的代码,然后就实现了一些非常有意思的玩意儿. 先看效果图 实际运用要和现实联系在一起,经历和 ...

  5. 写一个带输入输出的存储过程_携程大佬带你写一个可扩展的Spring插件。

    前语:不要为了读文章而读文章,一定要带着问题来读文章,勤思考. 作者:宋顺   来源:nobodyiam.com # 背景介绍 Spring现在几乎已经成为了Java开发的必备框架,在享受Spring ...

  6. java手写一个分页的方法_java web手写实现分页功能

    现在很多流行的框架,都可以很快的把分页效果做出来,但是作为一名程序员你必须得知道手写分页的流程: 场景效果: 一.分页的思路 首先我们得知道写分页代码的思路,保持思路清晰,才能行云流水的去写代码,其实 ...

  7. 如何写一个好的方法-读Clean Code 有感

    针对方法,文中提到了几个规则,我认为比较有价值的几个列在下面. 1.      短小.好的方法是只做一件事情. 那么如何判断一个方法是做了一件事情呢?根据Clean Code的描述,是指的方法所作的事 ...

  8. java让一个方法等待_如何写一个“等待”的方法?

    只需将您的方法转换为任务 . 像@Romiox我通常使用这个扩展 public static partial class Ext { #region Public Methods public sta ...

  9. 通过生成器写一个日志调用方法

    要求: 代码: import loggingdef logging_data(filename, channel='terminal'):logger = logging.getLogger()log ...

最新文章

  1. 61 Celery Beat 任务调度
  2. 淡淡说说技术人员创业
  3. c 整数的逆序输出 输入3,2就算 2+22+222的结果
  4. 推荐一个免费的屏幕取色器,鼠标放到的位置自动显示RGB
  5. 初探 C# GPU 通用计算技术
  6. Java: String.split(....); 结果很意外
  7. abaqus生成adams柔性体_1:ABAQUS有限元分析-ABAQUS软件介绍
  8. Spring中IoC创建对象方式(构造器注入)
  9. 松下plc驱动VF0变频器_2021厦门松下伺服马达回收现金回收
  10. HCIE RS 2019.11.05面试战报
  11. netdev_priv
  12. 论文索引平台EI,SCI
  13. 使用静态库的一些问题 -all_load
  14. TBSchedule初识
  15. redis 复制功能测试(转阿辉的百度空间)
  16. 光通信的再思考:5G流量爆发下的数据密度革命
  17. 团队管理之《十人以下小团队管理手册》
  18. 元旦给计算机老师的贺卡,一年级元旦给老师的贺卡祝福语
  19. 不成熟的梦想家 (未熟DREAMER)
  20. html语言编辑方法,Html双击使文字可编辑的方法

热门文章

  1. POJ-3635 Full Tank? 变形最短路
  2. javasript 面向对象
  3. [webpack3.8.1]Guides-4-Output Management(输出管理)
  4. 【CodeForces 577C】Vasya and Petya’s Game
  5. bkwin设置文本控件为多行模式
  6. GridView实现数据编辑和删除(一)
  7. sed之G、H、g、h使用
  8. C#中的表达式和运算符
  9. 使用C#开发交互式命令行应用
  10. 在 dotnet runtime 的容器中安装 dotnet global tool