zoukankan      html  css  js  c++  java
  • 如何在 NetCore 中定义我们自己的JSON配置文件的管理器。

    一、介绍

        微软已经对外提供了新的平台,我们叫它们是 Net Core 平台,这个平台和 Net Framework 平台有本质的区别,这个最本质的区别就是微软的C#代码可以跨平台了。当前我们主流的3大平台 Net Core 都支持的挺好的,比如:Windows、Linux和Mac。当然编程的体验和方式也发生了很大的不同了。我们以前使用的 Net Framework 平台就是一个大而全的平台,类似全家桶,使用很方便,但是也很笨重。但是 Net Core 平台就采用了“按需索取”的最小设计原则,搭建框架和设计系统,如果我们需要其他类库可以通过 Nuget 获取。

        今天,我们也不会聊太多的东西,抛砖引玉,说说如何在 NetCore 里面如何自定义基于 json 配置文件的管理器的,编程体验还是有不小差异的。

    二、编码实现

        今天我们在类库里面定义一个可以访问基于 JSON 的配置文件的配置文件管理器对象。当然这个类库是也是可以跨平台的,当前版本是 Net 5.0。

        1、在开始我们的编码之前,我们先要进入必要的类库。

          Microsoft.Extensions.Configuration.Abstractions

          Microsoft.Extensions.Configuration.FileExtensions

          Microsoft.Extensions.Configuration.Json

        2、编写我们自定义的配置文件管理器。

          我们这个类型可以配置默认配置文件,myconfiguration.json,也可以自己增加的配置文件,覆盖默认的配置文件。

          代码很简单,没有什么可以多说了。

          

      1 using Microsoft.Extensions.Configuration;
      2 using System.IO;
      3 
      4 namespace PatrickLiu.NetCore50.IOCFramework
      5 {
      6     /// <summary>
      7     /// 该类型定义了自己定义配置文件的配置管理器。
      8     /// </summary>
      9     public sealed class CustomConfigurationManager
     10     {
     11         #region 私有字段
     12 
     13         private IConfigurationRoot _configurationRoot;
     14         private string _configuration;
     15 
     16         #endregion
     17 
     18         #region 静态字段
     19 
     20         private static CustomConfigurationManager _instance;
     21         private static readonly object lockObj = new object();
     22 
     23         #endregion
     24 
     25         #region 构造函数
     26 
     27         /// <summary>
     28         /// 类型构造函数,用于初始化配置跟对象和配置对象的生成器。
     29         /// </summary>
     30         private CustomConfigurationManager()
     31         {
     32             JsonConfigurationFile = "myconfiguration.json";
     33             Init();
     34         }
     35 
     36         #endregion
     37 
     38         #region 公用私有方法
     39 
     40         /// <summary>
     41         /// 初始化配置文件信息。
     42         /// </summary>
     43         private void Init()
     44         {
     45             var builder = new ConfigurationBuilder()
     46                     .SetBasePath(Directory.GetCurrentDirectory())
     47                     .AddJsonFile(JsonConfigurationFile);
     48 
     49             _configurationRoot = builder.Build();
     50         }
     51 
     52         #endregion
     53 
     54         #region 对外的访问接口
     55 
     56         /// <summary>
     57         /// 获取 CustomConfigurationManager 类型的单件实例。
     58         /// </summary>
     59         public static CustomConfigurationManager Current
     60         {
     61             get
     62             {
     63                 if (_instance == null)
     64                 {
     65                     lock (lockObj)
     66                     {
     67                         if (_instance == null)
     68                         {
     69                             _instance = new CustomConfigurationManager();
     70                         }
     71                     }
     72                 }
     73                 return _instance;
     74             }
     75         }
     76 
     77         /// <summary>
     78         /// 获取或者设置 json 的配置文件。
     79         /// </summary>
     80         public string JsonConfigurationFile
     81         {
     82             get { return _configuration; }
     83             set
     84             {
     85                 if (!string.IsNullOrEmpty(value) && !string.IsNullOrWhiteSpace(value))
     86                 {
     87                     _configuration = value;
     88                     Init();
     89                 }
     90             }
     91         }
     92 
     93         /// <summary>
     94         /// 获取指定名称节点的配置数据。
     95         /// </summary>
     96         /// <param name="nodeName">配置节点的名称。</param>
     97         /// <returns></returns>
     98         public string GetNode(string nodeName)
     99         {
    100             if (string.IsNullOrEmpty(nodeName) || string.IsNullOrWhiteSpace(nodeName))
    101             {
    102                 return null;
    103             }
    104             return _configurationRoot[nodeName];
    105         }
    106 
    107         #endregion
    108     }
    109 }

        3、测试方法,我建立了两个文件,配置文件的名称分别是:myconfiguration.json,myconfiguration2.json

          配置文件的内容很简单,分别如下:
          myconfiguration.json      

    {
      "IServiceA": "PatrickLiu.NetCore50.IOCServiceses.MyServiceB,PatrickLiu.NetCore50.IOCServiceses"
    }

          myconfiguration2.json

    1 {
    2   "IServiceA2": "PatrickLiu.NetCore50.IOCServiceses.MyServiceB,PatrickLiu.NetCore50.IOCServiceses00000000"
    3 }

          

    1             {
    2                 var config=CustomConfigurationManager.Current.GetNode("IServiceA");
    3                 CustomConfigurationManager.Current.JsonConfigurationFile = "myconfiguration2.json";
    4                 config = CustomConfigurationManager.Current.GetNode("IServiceA2");
    5 
    6             }    

    三、总结。

        这个也没有什么难度,只是简单说明一下,NetCore 下编码还是有很大的差别的,配置文件的访问也是不同的,应用的类库也是不同的,作为自己的日志吧。也许时间长了,自己忘却了,可以来这里看看。不忘初心,继续努力。

    天下国家,可均也;爵禄,可辞也;白刃,可蹈也;中庸不可能也
  • 相关阅读:
    SpringBoot进阶教程(六十七)RateLimiter限流
    Nginx限流配置
    ab test压力测试
    Nginx负载均衡配置
    arduino串口通信
    flask文件路径设置问题
    WIN10和ubunu共享文件夹相互访问
    树莓派录音和播放声音
    深度学习论文翻译解析(十六):Squeeze-and-Excitation Networks
    人工智能必备数学基础:高等数学基础(2)
  • 原文地址:https://www.cnblogs.com/PatrickLiu/p/15099827.html
Copyright © 2011-2022 走看看