欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

给IConfiguration写一个GetAppSetting扩展方法

程序员文章站 2022-04-08 20:41:14
给 写一个 扩展方法 Intro 在 .net core 中,微软已经默认使用 appsettings.json 来代替 app.config,并重新设计了一套完整的配置系统,可以支持 json/xml/ini/环境变量等。 在 .net core 中有一个 的扩展方法用来比较方便的获取链接字符串, ......

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 这个节点下的某个配置

实现代码:

        /// <summary>
        /// getappsetting
        /// shorthand for getsection("appsettings")[key]
        /// </summary>
        /// <param name="configuration">iconfiguration instance</param>
        /// <param name="key">appsettings key</param>
        /// <returns>app setting value</returns>
        public static string getappsetting([notnull]this iconfiguration configuration, string key)
        {
            return configuration.getsection("appsettings")[key];
        }

        /// <summary>
        /// getappsetting
        /// shorthand for getsection("appsettings")[key]
        /// </summary>
        /// <param name="configuration">iconfiguration instance</param>
        /// <param name="key">appsettings key</param>
        /// <returns>app setting value</returns>
        public static t getappsetting<t>([notnull]this iconfiguration configuration, string key)
        {
            return configuration.getsection("appsettings")[key].to<t>();
        }

        /// <summary>
        /// getappsetting
        /// shorthand for getsection("appsettings")[key]
        /// </summary>
        /// <param name="configuration">iconfiguration instance</param>
        /// <param name="key">appsettings key</param>
        /// <param name="defaultvalue">default value if not exist</param>
        /// <returns>app setting value</returns>
        public static t getappsetting<t>([notnull] this iconfiguration configuration, string key, t defaultvalue)
        {
            return configuration.getsection("appsettings")[key].toordefault(defaultvalue);
        }

        /// <summary>
        /// getappsetting
        /// shorthand for getsection("appsettings")[key]
        /// </summary>
        /// <param name="configuration">iconfiguration instance</param>
        /// <param name="key">appsettings key</param>
        /// <param name="defaultvaluefunc">default value func if not exist to get a default value</param>
        /// <returns>app setting value</returns>
        public static t getappsetting<t>([notnull] this iconfiguration configuration, string key, func<t> defaultvaluefunc)
        {
            return configuration.getsection("appsettings")[key].toordefault(defaultvaluefunc);
        }

查看源码

使用

使用起来和 getconnectionstring 差不多

测试 appsettings.json

{
  "connectionstrings": {
    "testdb": "server=.;database=test;uid=weihanli;pwd=admin888"
  },
  "appsettings":{
    "number": 12,
    "city": "shanghai"
  }
}

getappsetting 示例

        iconfiguration configuration = new configurationbuilder()
            // ...
            .addjsonfile("appsettings.json")
            .build();

        var city = configuration.getappsetting("city");
        var number = configuration.getappsetting<int>("number");
        system.console.writeline($"city:{city}, number:{number}");