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

it2024-10-16  37

使用

#region Configuration使用 { // 1、创建ConfigurationBuilder对象 ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddJsonFile("app.json"); // 2、构建Configuration对象 Configuration configuration = configurationBuilder.Build(); string value = configuration["json"]; } #endregion

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; } }

处理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; } } /// <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配置文件数据排序"); } } /// <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}:进行安全验证"); } }

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]; } } }
最新回复(0)