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