123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Xml;
- namespace CB.Config
- {
- public class DataProviderConfig
- {
- //修改DJP2016-05-24,修改拼接方式,避免出现 debugconfig\DataPrivoder.config
- // private static string configPath = AppDomain.CurrentDomain.BaseDirectory +"Config\\DataPrivoder.config"
- private static string configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config\\DataPrivoder.config");
-
- private static long _version = 0;
- private static List<DataProviderConfigInfo> _configList = null;
- private static object lockObject = new object();
- static DataProviderConfig()
- {
- LoadConfig();
- }
- public static void LoadConfig()
- {
- lock (lockObject)
- {
- if (!File.Exists(configPath))
- { throw new Exception("未找到数据访问层配置文件[/Config/DataPrivoder.config]"); }
- XmlDocument doc = new XmlDocument();
- try
- { doc.Load(configPath); }
- catch
- { throw new Exception("数据访问层配置文件[/Config/DataPrivoder.config]配置有误,请核查!"); }
- string default_privoder = "", default_connect = "";
- #region 数据访问层接口配置
- XmlNode node = doc.SelectSingleNode("DataPrivoderConfig/DbProviders");
- if (null == node)
- { throw new Exception("数据访问层配置文件[/Config/DataPrivoder.config]未配置DataPrivoderConfig/DbProviders节点"); }
- XmlAttribute attr = node.Attributes["Provider"];
- if (null != attr)
- default_privoder = attr.Value;
- Dictionary<string, string> DbProviderDic = new Dictionary<string, string>();
- var nodeList = node.SelectNodes("DbProvider");
- if (null != nodeList && 0 < nodeList.Count)
- {
- foreach (XmlNode item in nodeList)
- {
- DbProviderDic.Add(item.Attributes["name"].Value, item.Attributes["Provider"].Value);
- }
- }
- if (string.IsNullOrEmpty(default_privoder) && 0 >= DbProviderDic.Keys.Count)
- throw new Exception("数据访问层配置文件[/Config/DataPrivoder.config]未配置DataPrivoderConfig/DbProviders节点");
- #endregion
- #region 数据库连接字符串
- node = doc.SelectSingleNode("DataPrivoderConfig/ConnectStrings");
- if (null == node)
- { throw new Exception("数据访问层配置文件[/Config/DataPrivoder.config]未配置DataPrivoderConfig/ConnectStrings节点"); }
- attr = node.Attributes["ConnectString"];
- if (null != attr)
- default_connect = attr.Value;
- Dictionary<string, string> ConnectStringDic = new Dictionary<string, string>();
- nodeList = node.SelectNodes("ConnectString");
- if (null != nodeList && 0 < nodeList.Count)
- {
- foreach (XmlNode item in nodeList)
- {
- ConnectStringDic.Add(item.Attributes["name"].Value, item.Attributes["ConnectString"].Value);
- }
- }
- if (string.IsNullOrEmpty(default_connect) && 0 >= ConnectStringDic.Keys.Count)
- throw new Exception("数据访问层配置文件[/Config/DataPrivoder.config]未配置DataPrivoderConfig/ConnectStrings节点");
- #endregion
- nodeList = doc.SelectNodes("DataPrivoderConfig/objects/object");
- if (null != nodeList && 0 < nodeList.Count)
- {
- var configList = new List<DataProviderConfigInfo>();
- XmlAttributeCollection attrArray;
- foreach (XmlNode item in nodeList)
- {
- attrArray = item.Attributes;
- var config = new DataProviderConfigInfo()
- {
- InterfaceId = attrArray["id"].Value,
- TypeName = attrArray["typeName"].Value
- };
- config.ConnectStringName = null == attrArray["ConnectStringName"] || !ConnectStringDic.ContainsKey(attrArray["ConnectStringName"].Value) ?
- default_connect : ConnectStringDic[attrArray["ConnectStringName"].Value];
- config.DbProviderName = null == attrArray["DbProviderName"] || !DbProviderDic.ContainsKey(attrArray["DbProviderName"].Value) ?
- default_privoder : DbProviderDic[attrArray["DbProviderName"].Value];
- configList.Add(config);
- }
- _configList = configList;
- }
- _version = File.GetLastWriteTime(configPath).Ticks;
- }
- }
- public static DataProviderConfigInfo GetConfig(string interfaceId)
- {
- if (null == _configList || 0 >= _configList.Count)
- {
- LoadConfig();
- }
- if (_version != File.GetLastWriteTime(configPath).Ticks)
- {
- LoadConfig();
- }
- foreach (var item in _configList)
- {
- if (item.InterfaceId == interfaceId)
- {
- return item;
- }
- }
- return null;
- }
- }
- }
|