zoukankan      html  css  js  c++  java
  • 系统配置文件的加载设置-以xml文件为例

    前言:开发中经常会遇到加载一些配置文件信息,这些信息变化的概率很小,不需要实时的更新。这样的信息放在数据库里自然是不合适的,所以最好的办法是写在配置文件中,在程序第一次运行的时候加载到内存,以后用到的时候直接从内存读取就可以了。

    这样做的好处:1、效率高,读取本地文件或内存信息和读取数据库中的信息,效率相比可想而知;2、不需要为这样的数据单独建立表;3,数据结构灵活,文件中的数据文件的结构组织很灵活。

    下面是我的一种实现方式,仅供参考:

    1.首先是配置文件类的设计。

     1 public static class AdminConfigManager
     2     {       
     3         public static IList<AdminUser> AdminUsers { get; } = new List<AdminUser>();
     4 
     5         #region 加载、保存相关
     6         /// <summary>
     7         /// 获取或设置配置文件路径。
     8         /// </summary>
     9         public static string ConfigFilePath { get; set; }
    10         
    11         /// <summary>
    12         /// 加载配置。
    13         /// </summary>
    14         public static void LoadConfig()
    15         {
    16             XElement root = XElement.Load(ConfigFilePath);
    17             AdminUsers.Clear();
    18             foreach (XElement element in root.Elements("AdminUser"))
    19             {
    20                 AdminUser adminUser = new AdminUser();
    21                 adminUser.Id = (string)element.Attribute("Id");
    22                 adminUser.Name = (string)element.Attribute("Name");
    23                 AdminUsers.Add(adminUser);
    24             }
    25         }
    26 
    27         /// <summary>
    28         /// 保存配置。
    29         /// </summary>
    30         public static void SaveConfig()
    31         {
    32             XDocument doc = new XDocument(
    33                 new XDeclaration("1.0", "utf-8", "yes"),
    34                 new XElement("AdminConfig",
    35                     from adminUser in AdminUsers
    36                     select new XElement("AdminUser",
    37                         new XAttribute("Id", adminUser.Id),
    38                         new XAttribute("Name", adminUser.Name))));
    39 
    40             doc.Save(ConfigFilePath);
    41         }
    42         #endregion
    43     }
    44 
    45     public sealed class AdminUser
    46     {
    47         public string Id { get; set; }
    48         public string Name { get; set; }
    49     }

    2.使用实例

     1 static void Main(string[] args)
     2         {
     3             #region 1.0 加载配置
     4             //这段代码一般放在程序的启动入库处,比如web项目的Global.asax.cs文件的Application_Start()方法里
     5             AdminConfigManager.ConfigFilePath = @"../../AdminUserConfig.xml";//配置xml文件路径
     6             AdminConfigManager.LoadConfig();//加载文件 
     7             #endregion
     8 
     9             IList<AdminUser> andminUsers = AdminConfigManager.AdminUsers;
    10 
    11             #region 2.0 新增
    12             AdminUser addAdminUser = new AdminUser();
    13             addAdminUser.Id = "RJ";
    14             addAdminUser.Name = "任静";
    15             AdminConfigManager.AdminUsers.Add(addAdminUser);
    16             AdminConfigManager.SaveConfig();
    17             #endregion
    18 
    19             #region 3.0 删除
    20             //AdminUser deleteAdminUser = AdminConfigManager.AdminUsers.Where(u => u.Id == "RJ").First();
    21             //AdminConfigManager.AdminUsers.Remove(deleteAdminUser);
    22             //AdminConfigManager.SaveConfig(); 
    23             #endregion
    24 
    25             Console.ReadKey();
    26         }

     3.xml文件效果实例

  • 相关阅读:
    5G网络类型 ?
    命令行签名
    软件著作权之源代码
    汗,查了很久的问题,竟然是重载错函数
    终于考完PMP
    ImportError: No module named _tkinter on macos
    numpy.trace对于三维以上array的解析
    ValueError: output parameter for reduction operation logical_and has too many dimensions ?
    numexpr low version warning
    Execution failed for task ':compileDebugAidl'.
  • 原文地址:https://www.cnblogs.com/renjing/p/SystemConfig.html
Copyright © 2011-2022 走看看