(精华)2020年10月21日 设计模式案例 .NetCore Configuration的实现思路

举报
愚公搬代码 发表于 2021/10/20 00:31:39 2021/10/20
【摘要】 使用 #region Configuration使用 { // 1、创建ConfigurationBuilder对象 ConfigurationBuilder configuration...

使用

#region Configuration使用
{
    // 1、创建ConfigurationBuilder对象
    ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
    configurationBuilder.AddJsonFile("app.json");

    // 2、构建Configuration对象
    Configuration configuration = configurationBuilder.Build();
    string value = configuration["json"];
}
#endregion

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

ConfigurationBuilder类

/// <summary>
/// 配置建造者类(用于构建配置对象)
/// </summary>
class ConfigurationBuilder
{
    /// <summary>
    /// 配置类
    /// </summary>
    private Configuration configuration = new Configuration();

    /// <summary>
    /// 1、添加json配置文件配置信息
    /// </summary>
    /// <returns></returns>
    public ConfigurationBuilder AddJsonFile(string jsonFilePath ,string reload)
    {
        // 1、获取json文件输入流
       /* Console.WriteLine($"{jsonFilePath}:获取json本地文件输入流");

        // 2、转换成为Dictionary对象
        configuration.Data.Add("json", "json文件内容");*/
        JsonConfigurationReader jsonConfigurationReader = new JsonConfigurationReader();
        jsonConfigurationReader.ReadJsonFile(jsonFilePath);
        // 添加到集合
        //configuration.Data.Add();

        return this;
    }

    /// <summary>
    /// 2、添加xml配置文件配置信息
    /// </summary>
    /// <returns></returns>
    public ConfigurationBuilder AddXmlFile(string xmlFilePath)
    {
       /* Console.WriteLine($"{XMLFilePath}:获取XML本地文件输入流");

        // 2、转换成为Dictionary对象
        configuration.Data.Add("json", "json文件内容1");*/
        return this;
    }

    /// <summary>
    /// 3、添加Ini配置文件配置信息
    /// </summary>
    /// <returns></returns>
    public ConfigurationBuilder AddIniFile(string iniFilePath)
    {
        return this;
    }

    /// <summary>
    /// 构建Configuration对象
    /// </summary>
    /// <returns></returns>
    public Configuration Build()
    {
        return configuration;
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

处理JSON文件相关类

/// <summary>
/// json文件阅读接口
/// </summary>
interface IJsonConfigurationReader
{
    public IDictionary<string, string> ReadJsonFile(string jsonFilePath);
}
/// <summary>
/// json文件阅读,将文件转换成为字典
/// </summary>
class JsonConfigurationReader : IJsonConfigurationReader
{
    public IDictionary<string, string> ReadJsonFile(string jsonFilePath)
    {
        // 1、获取json文件输入流
        Console.WriteLine($"{jsonFilePath}:获取json本地文件输入流");

        // 2、转换成为Dictionary
        IDictionary<string, string> Data = new Dictionary<string, string>();
        Data.Add("json","json文件内容");

        // 1、排序(扩展)
        // 2、去重(扩展)
        // 3、安全获取(代理) === 例子
        // 4、远程获取(代理)
        return Data;
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
/// <summary>
    /// 对于json文件读取进行排序装饰
    /// </summary>
    class JsonConfigurationReaderProxy : IJsonConfigurationReader
    {
        private IJsonConfigurationReader jsonConfigurationReader;
        public JsonConfigurationReaderProxy(IJsonConfigurationReader jsonConfigurationReader)
        {
            this.jsonConfigurationReader = jsonConfigurationReader;
        }

        public IDictionary<string, string> ReadJsonFile(string jsonFilePath)
        {
            IDictionary<string, string> Data = jsonConfigurationReader.ReadJsonFile(jsonFilePath);
            // 排序
            SortData(Data);
            return Data;
        }

        private void SortData(IDictionary<string, string> Data)
        {
            Console.WriteLine("json配置文件数据排序");
        }
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
/// <summary>
    /// json配置文件进行安全读取
    /// </summary>
    class JsonConfigurationReaderProxy : IJsonConfigurationReader
    {
        private IJsonConfigurationReader jsonConfigurationReader;
        public JsonConfigurationReaderProxy(IJsonConfigurationReader jsonConfigurationReader)
        {
            this.jsonConfigurationReader = jsonConfigurationReader;
        }

        public IDictionary<string, string> ReadJsonFile(string jsonFilePath)
        {
            // 1、安全验证
            RemoteConnection(jsonFilePath);

            IDictionary<string, string> Data = jsonConfigurationReader.ReadJsonFile(jsonFilePath);
            return Data;
        }

        private void RemoteConnection(string jsonFilePath)
        {
            Console.WriteLine($"{jsonFilePath}:进行安全验证");
        }
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

Configuration类

/// <summary>
    /// 配置类(核心领域模型)
    /// </summary>
    class Configuration
    {
        /// <summary>
        /// 配置数据
        /// </summary>
        public IDictionary<string, string> Data { set; get; } = new Dictionary<string, string>();

        // 1、扩展思路
      //  public List<IConfigurationProvider> lists = new List<IConfigurationProvider>();
        /// <summary>
        /// 设值
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public void Set(string key,string value)
        {
            Data.Add(key, value);
        }

        /// <summary>
        /// 取值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string this[string key]
        {
            get
            {
                return Data[key];
            }
        }
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。

原文链接:codeboy.blog.csdn.net/article/details/109202949

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。