DataProviderConfig.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Xml;
  5. namespace CB.Config
  6. {
  7. public class DataProviderConfig
  8. {
  9. //修改DJP2016-05-24,修改拼接方式,避免出现 debugconfig\DataPrivoder.config
  10. // private static string configPath = AppDomain.CurrentDomain.BaseDirectory +"Config\\DataPrivoder.config"
  11. private static string configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config\\DataPrivoder.config");
  12. private static long _version = 0;
  13. private static List<DataProviderConfigInfo> _configList = null;
  14. private static object lockObject = new object();
  15. static DataProviderConfig()
  16. {
  17. LoadConfig();
  18. }
  19. public static void LoadConfig()
  20. {
  21. lock (lockObject)
  22. {
  23. if (!File.Exists(configPath))
  24. { throw new Exception("未找到数据访问层配置文件[/Config/DataPrivoder.config]"); }
  25. XmlDocument doc = new XmlDocument();
  26. try
  27. { doc.Load(configPath); }
  28. catch
  29. { throw new Exception("数据访问层配置文件[/Config/DataPrivoder.config]配置有误,请核查!"); }
  30. string default_privoder = "", default_connect = "";
  31. #region 数据访问层接口配置
  32. XmlNode node = doc.SelectSingleNode("DataPrivoderConfig/DbProviders");
  33. if (null == node)
  34. { throw new Exception("数据访问层配置文件[/Config/DataPrivoder.config]未配置DataPrivoderConfig/DbProviders节点"); }
  35. XmlAttribute attr = node.Attributes["Provider"];
  36. if (null != attr)
  37. default_privoder = attr.Value;
  38. Dictionary<string, string> DbProviderDic = new Dictionary<string, string>();
  39. var nodeList = node.SelectNodes("DbProvider");
  40. if (null != nodeList && 0 < nodeList.Count)
  41. {
  42. foreach (XmlNode item in nodeList)
  43. {
  44. DbProviderDic.Add(item.Attributes["name"].Value, item.Attributes["Provider"].Value);
  45. }
  46. }
  47. if (string.IsNullOrEmpty(default_privoder) && 0 >= DbProviderDic.Keys.Count)
  48. throw new Exception("数据访问层配置文件[/Config/DataPrivoder.config]未配置DataPrivoderConfig/DbProviders节点");
  49. #endregion
  50. #region 数据库连接字符串
  51. node = doc.SelectSingleNode("DataPrivoderConfig/ConnectStrings");
  52. if (null == node)
  53. { throw new Exception("数据访问层配置文件[/Config/DataPrivoder.config]未配置DataPrivoderConfig/ConnectStrings节点"); }
  54. attr = node.Attributes["ConnectString"];
  55. if (null != attr)
  56. default_connect = attr.Value;
  57. Dictionary<string, string> ConnectStringDic = new Dictionary<string, string>();
  58. nodeList = node.SelectNodes("ConnectString");
  59. if (null != nodeList && 0 < nodeList.Count)
  60. {
  61. foreach (XmlNode item in nodeList)
  62. {
  63. ConnectStringDic.Add(item.Attributes["name"].Value, item.Attributes["ConnectString"].Value);
  64. }
  65. }
  66. if (string.IsNullOrEmpty(default_connect) && 0 >= ConnectStringDic.Keys.Count)
  67. throw new Exception("数据访问层配置文件[/Config/DataPrivoder.config]未配置DataPrivoderConfig/ConnectStrings节点");
  68. #endregion
  69. nodeList = doc.SelectNodes("DataPrivoderConfig/objects/object");
  70. if (null != nodeList && 0 < nodeList.Count)
  71. {
  72. var configList = new List<DataProviderConfigInfo>();
  73. XmlAttributeCollection attrArray;
  74. foreach (XmlNode item in nodeList)
  75. {
  76. attrArray = item.Attributes;
  77. var config = new DataProviderConfigInfo()
  78. {
  79. InterfaceId = attrArray["id"].Value,
  80. TypeName = attrArray["typeName"].Value
  81. };
  82. config.ConnectStringName = null == attrArray["ConnectStringName"] || !ConnectStringDic.ContainsKey(attrArray["ConnectStringName"].Value) ?
  83. default_connect : ConnectStringDic[attrArray["ConnectStringName"].Value];
  84. config.DbProviderName = null == attrArray["DbProviderName"] || !DbProviderDic.ContainsKey(attrArray["DbProviderName"].Value) ?
  85. default_privoder : DbProviderDic[attrArray["DbProviderName"].Value];
  86. configList.Add(config);
  87. }
  88. _configList = configList;
  89. }
  90. _version = File.GetLastWriteTime(configPath).Ticks;
  91. }
  92. }
  93. public static DataProviderConfigInfo GetConfig(string interfaceId)
  94. {
  95. if (null == _configList || 0 >= _configList.Count)
  96. {
  97. LoadConfig();
  98. }
  99. if (_version != File.GetLastWriteTime(configPath).Ticks)
  100. {
  101. LoadConfig();
  102. }
  103. foreach (var item in _configList)
  104. {
  105. if (item.InterfaceId == interfaceId)
  106. {
  107. return item;
  108. }
  109. }
  110. return null;
  111. }
  112. }
  113. }