⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setting.cs

📁 该文件是多层体系结构的数据访问层
💻 CS
字号:
#region Copyright & License
//
// $Copyright:$
//
#endregion
#region Document Information
// $Author: Bai.shijun $
// $Rev: 511 $ 
// $Date: 05-10-08 16:12 $
#endregion

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Diagnostics;

using Eai.Configuration;
using Eai.Data;

namespace Eai.Data
{
    public class Setting
    {
        private const string ConfigNodePath = "data";
        internal const string DefaultCreatorName = "default";

        static Setting()
        {
            Setting current = new Setting();
            XmlNode configNode = EaiSetting.CurrentSetting.ConfigSection;
            if (configNode != null)
            {
                XmlNode dataNode = configNode.SelectSingleNode(ConfigNodePath);
                if (dataNode != null) current.Load(dataNode);
            }
            Current = current;
        }

        public static readonly Setting Current;

        public Setting()
        {
        }

        public void Load(string xmlString)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xmlString);
            XmlNode configNode = doc.DocumentElement;
            Load(configNode);
        }

        private IDataAccessorCreatorList dataAccessorCreators = 
            new DataAccessorCreatorList();
        public IDataAccessorCreatorList DataAccessorCreators
        {
            get { return dataAccessorCreators; }
        }

        public void Load(XmlNode dataNode)
        {
            foreach (XmlNode cnode in dataNode.ChildNodes)
            {
                XmlElement ele = cnode as XmlElement;
                if (ele == null) continue;
                switch (ele.Name)
                {
                    case "dataAccessorCreator":
                        {
                            LoadDataAccessorCreator(ele);
                            break;
                        }
                    default:
                        {
                            throw new Exception("Unkown element name " + ele.Name);
                        }
                }
            }
        }

        private void LoadDataAccessorCreator(XmlElement ele)
        {
            string name = ele.GetAttribute("name");
            if (name == "")
            {
                name = DefaultCreatorName;
            }

            IDataAccessorCreatorList creators = dataAccessorCreators;
            if (creators.ContainsKey(name)) creators.Remove(name);
            DataAccessorCreatorConfig config = CreateDataAccessorCreatorConfigByXmlElement(name, ele);
            creators.Add(name, config);
        }

        public static DataAccessorCreatorConfig CreateDataAccessorCreatorConfigByXmlElement(string name, XmlElement ele)
        {
            string creatorType = ele.GetAttribute("type");
            XmlNodeList propNodes = ele.SelectNodes("property");
            //load properties of creator.
            IDictionary<string, string> properties = LoadProperty(propNodes);
            DataAccessorCreatorConfig config = new DataAccessorCreatorConfig(name, creatorType, properties, ele);
            return config;
        }

        private static IDictionary<string, string> LoadProperty(XmlNodeList nodes)
        {
            IDictionary<string, string> properties = new Dictionary<string, string>();
            foreach (XmlNode node in nodes)
            {
                XmlElement ele = node as XmlElement;
                if (ele == null) continue;
                string key = ele.GetAttribute("key");
                if (key != "")
                {
                    string value = ele.GetAttribute("value");
                    properties.Add(key, value);
                }
            }

            return properties;
        }

        public interface IDataAccessorCreatorList : IDictionary<string, IDataAccessorCreatorConfig>
        {
        }

        public class DataAccessorCreatorList : Dictionary<string, IDataAccessorCreatorConfig>, IDataAccessorCreatorList
        {
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -