• .NET Core 获取自定义配置文件信息


    前言

      .net core来势已不可阻挡。既然挡不了,那我们就顺应它。了解它并学习它。今天我们就来看看和之前.net版本的配置文件读取方式有何异同,这里不在赘述.NET Core 基础知识。

    ps:更新版,更新了多种方式实现读取配置文件信息,各位看官结合自己实际情况选择合适的读取方式即可

    实现方式一

    我们先来看下初始的Json文件是怎样的:

     
    {
      "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
          "Default": "Warning"
        }
      },
      "Test": {
        "One": 123,
        "Two": "456",
        "Three": "789",
        "Content": {
          "cone": 111,
          "ctwo": "潇十一郎" 
        } 
      }
    }
     

     读取Json配置文件信息,我们需要安装Microsoft.Extensions.Configuration.Json 包,如下:

    然后再 调用AddJsonFile把Json配置的Provider添加到ConfigurationBuilder中,实现如下:

    我们将Configuration 属性改成

    public static IConfiguration Configuration { get; set; }

    然后再ConfigureServices 中将Json配置的Provider添加到ConfigurationBuilder中

     var builder = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json");
                Configuration = builder.Build();
                services.AddSingleton<IConfiguration>(Configuration);//配置IConfiguration的依赖

    然后配置完,我们就可以读取了,当然,如果是在其他地方调用,就需要通过构造函数注入IConfiguration

    读取方式一:使用key读取,如下:

     
            private readonly IConfiguration _configuration;
            //构造注入
            public HomeController(IConfiguration configuration)
            {
                _configuration = configuration;
            }
    
            public IActionResult Index()
            {
                //方式一 通过 Key值获取
                var one = _configuration["Test:One"]; //123
                var conw = _configuration["Test:Content:ctwo"]; //潇十一郎
            }
     

    读取方式二:使用GetValue<T>,需要安装Microsoft.Extensions.Configuration.Binder包,读取如下:

     
            private readonly IConfiguration _configuration;
            //构造注入
            public HomeController(IConfiguration configuration)
            {
                _configuration = configuration;
            }
    
            public IActionResult Index()
            {
    
                //方式二 通过GetValue<T>(string key)方式获取 第一个是直接获取key 第二个若查找不到则指定默认值
                var two = _configuration.GetValue<int>("Test:One"); //123
                var three = _configuration.GetValue<string>("Test:Three"); //789
                var ctwo = _configuration.GetValue<string>("Test:Content:ctwo"); //潇十一郎
    
                var four = _configuration.GetValue<string>("Test:four", "我是默认值"); //我是默认值
    
            }
     

    特别说明一下:GetValue的泛型形式有两个重载,一个是GetValue("key"),另一个是可以指定默认值的GetValue("key",defaultValue).如果key的配置不存在,第一种结果为default(T),第二种结果为指定的默认值.

    上述两个读取方式调试图如下:

    实现方式二

    注:需要NuGet引入:Microsoft.Extensions.Options.ConfigurationExtensions

    ①我们再配置文件appsettings.json中 新增自定义API Json如下:

     
    {
      "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
          "Default": "Warning"
        }
      },
      "API": {
        "Url": "http://localhost:8080/",
        "getclub": "api/club"
      } 
    }
     

    ②然后我们定义一个静态类,再类中申明一个IConfigurationSection 类型变量

    private static IConfigurationSection _appSection = null;

    ③写一个AppSetting静态方法获取到配置的Value项,代码如下:

     
           public static string AppSetting(string key)
            {
                string str = string.Empty;
                if (_appSection.GetSection(key) != null)
                {
                    str = _appSection.GetSection(key).Value;
                }
                return str;
            }
     

    ④需要设置IConfigurationSection初始值,如下:

           public static void SetAppSetting(IConfigurationSection section)
            {
                _appSection = section;
            }

    ⑤然后写一个根据不同Json项读取出对应的值即可:

      public static string GetSite(string apiName)
      {
          return AppSetting(apiName);
      }

    ⑥有了以上几个步骤,基本上读取代码已经全部写完,剩下最后一个最重要的步骤,将要读取的Json文件配置到Startup.cs的Configure方法中,如下:

    这样,我们就可以很轻松的获取到我们想要的配置项了,整段CS代码如下:

     
        /// <summary>
        /// 配置信息读取模型
        /// </summary>
        public static class SiteConfig
        {
            private static IConfigurationSection _appSection = null;
    
            /// <summary>
            /// API域名地址
            /// </summary>
            public static string AppSetting(string key)
            {
                string str = string.Empty;
                if (_appSection.GetSection(key) != null)
                {
                    str = _appSection.GetSection(key).Value;
                }
                return str;
            }
    
            public static void SetAppSetting(IConfigurationSection section)
            {
                _appSection = section;
            }
    
            public static string GetSite(string apiName)
            {
                return AppSetting(apiName);
            }
        }
     

    最后 ,我们来跑一下演示效果如下:

    1|0 补充

     

    事务总是不断发展,有更优的做法,那就一定要摒弃以前不太美的实现,现在补充一种实现获取配置文件的方法,更为优雅美观:

     NuGet引入:Microsoft.Extensions.Configuration 包

    在appsetting中加入短信相关配置信息:

    在Startup.cs中重写:

     
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    
    public IConfiguration Configuration { get; }
     

    新建一个静态类:ConfigurationKeys

     
    public class ConfigurationKeys
    {
            public static string SMS_APP_URL = "sms:url";
    
            public static string SMS_APP_ID = "sms:appid";
    
            public static string SMS_APP_SECRET = "sms:secret";
    
            public static string SMS_VERIFY_CODE_TEMPLATE = "sms:verifycodetemplate";
    }
     

    1|1使用

     

    在具体的控制器或者类中注入:

    private readonly IConfiguration _config;
    public SmsServices(IConfiguration config)
    {
        _config = config;
    }
    var templateId = _config[ConfigurationKeys.SMS_VERIFY_CODE_TEMPLATE];

        完!

  • 相关阅读:
    常建的性能指标
    性能测试常见分类
    性能测试相关概念和指标
    adb命令熟悉
    打包ajax生成小工具
    深入理解类加载demo
    设计模式七大原则
    javamail邮件实现
    @RequiredArgsConstructor用法
    spring-security查询数据库源码解析
  • 原文地址:https://www.cnblogs.com/webenh/p/11598873.html
Copyright © 2020-2023  润新知