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 _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 DbProviderDic = new Dictionary(); 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 ConnectStringDic = new Dictionary(); 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(); 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; } } }