這個框架用來解決自己的配置問題,為整個CWF框架的底層服務構架,他為上面的數據持久和緩存或者其它服務提供配置信息.
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Xml;
namespace CWF.ConfigManager
{
??? /// <summary>
??? /// 配置文件自定管理類
??? /// 開發者:歐元寒玟
??? /// 開發時間:2010.02.05
??? /// 最后修改時間:2010.02.05
??? /// </summary>
??? public class ConfigManagerHander:IConfigurationSectionHandler??
??? {
??????? #region IConfigurationSectionHandler 成員
??????? /// <summary>
??????? /// 實現接口的方法處理xml入口
??????? /// </summary>
??????? /// <param name="parent"></param>
??????? /// <param name="configContext"></param>
??????? /// <param name="section"></param>
??????? /// <returns></returns>
??????? public object Create(object parent, object configContext, System.Xml.XmlNode section)
??????? {
??????????? return new ConfigManager(section);
??????? }
??????? #endregion
??? }
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Reflection ;
namespace CWF.ConfigManager
{
??? /// <summary>
??? /// 實現配置文件處理的主要類
??? /// 開發者:歐元寒玟
??? /// 開發時間:2010.02.05
??? /// 最后修改時間:2010.02.05
??? /// </summary>
??? public? class ConfigManager
??? {
??????? /// <summary>
??????? /// 配置文件根節點
??????? /// </summary>
??????? private XmlNode section;
??????? /// <summary>
??????? /// 實例化
??????? /// </summary>
??????? /// <param name="Section"></param>
??????? public ConfigManager(XmlNode Section)
??????? {
??????????? section = Section;
??????? }
??????? /// <summary>
??????? /// 獲取類工廠
??????? /// </summary>
??????? /// <returns></returns>
??????? public ClassFactory getFactory()
??????? {
??????????? XmlNode factory = section.SelectSingleNode("http://classFactory");
??????????? return new ClassFactory(factory);
??????? }
??????? /// <summary>
??????? /// 獲取Windows服務
??????? /// </summary>
??????? /// <returns></returns>
??????? public WinServiceConfig getWinService()
??????? {
??????????? XmlNode ServiceNode = section.SelectSingleNode("http://windowsSercice");
??????????? return new WinServiceConfig(ServiceNode);
??????? }
??????? /// <summary>
??????? /// 獲取緩存對象類
??????? /// </summary>
??????? /// <returns></returns>
??????? public CacheConfig getCacheConfig()
??????? {
??????????? XmlNode ServiceNode = section.SelectSingleNode("http://cacheService");
??????????? return new CacheConfig(ServiceNode);
??????? }
??? }
??? /// <summary>
??? /// 類工廠服務
??? /// </summary>
??? public class ClassFactory
??? {
??????? private XmlNode node;
??????? /// <summary>
??????? /// 實例化
??????? /// </summary>
??????? /// <param name="factoryNode"></param>
??????? public ClassFactory(XmlNode factoryNode)
??????? {
??????????? node = factoryNode;
??????? }
??????? /// <summary>
??????? /// 獲取類
??????? /// </summary>
??????? /// <param name="className">類名</param>
??????? /// <returns>object</returns>
??????? public object getClass(string className)
??????? {
??????????? XmlNode classNode = node.SelectSingleNode("http://class[@name='"+className+"']");
??????????? object classObject = null;
??????????? if(classNode !=null)
??????????? {
??????????????? string StrType= classNode.Attributes["type"].Value;
??????????????? string url = null;
??????????????? Type type = Type.GetType(StrType);
??????????????? if (classNode.Attributes["url"] != null && classNode.Attributes["url"].Value != "")
??????????????? {
??????????????????? url = classNode.Attributes["url"].Value;
??????????????????? try
??????????????????? {
??????????????????????? classObject = Activator.GetObject(type, url);
??????????????????? }
??????????????????? catch
??????????????????? {
??????????????????? }
??????????????? }
??????????????? else
??????????????? {
??????????????????? try
??????????????????? {
??????????????????????? classObject = Activator.CreateInstance(type, null);
??????????????????? }
??????????????????? catch
??????????????????? {
??????????????????? }
??????????????? }
??????????? }
??????????? return classObject;
??????? }
??????? /// <summary>
??????? /// 獲取一個類工廠組的所有實例
??????? /// </summary>
??????? /// <param name="GroupName">組名</param>
??????? /// <returns></returns>
??????? public List<object> getClassGroup(string GroupName)
??????? {
??????????? XmlNode GroupNode = node.SelectSingleNode("http://classGroup[@name='" + GroupName + "']");
??????????? List<object> list = new List<object>();
??????????? for (int i = 0; i < GroupNode.ChildNodes.Count; i++)
??????????? {
??????????????? if (GroupNode.ChildNodes[i].Attributes["type"].Value != "")
??????????????? {
??????????????????? Type type = Type.GetType(GroupNode.ChildNodes[i].Attributes["type"].Value);
??????????????????? list.Add(Activator.CreateInstance(type,null));
??????????????? }
??????????? }
??????????? return list;
??????? }
??? }
??? /// <summary>
??? /// Windows Services服務
??? /// </summary>
??? public class WinServiceConfig
??? {
??????? private XmlNode RootNode;
??????? public WinServiceConfig(XmlNode ServiceNode)
??????? {
??????????? RootNode = ServiceNode;
??????? }
??????? /// <summary>
??????? /// 獲取所有服務的列表
??????? /// </summary>
??????? /// <returns></returns>
??????? public List<object> getIServers()
??????? {
??????????? List<object> objServerList=new List<object>();
??????????? foreach (XmlNode node in RootNode.SelectNodes("service"))
??????????? {
??????????????? if (node != null && node.Attributes["type"] != null && node.Attributes["type"].Value != "")
??????????????? {
??????????????? Type type=Type.GetType(node.Attributes["type"].Value);
??????????????? IServerObj obj = new IServerObj(Activator.CreateInstance(type, null), node.Attributes["type"].Value, node.Attributes["type"].Value, node.Attributes["type"].Value);
??????????????? objServerList.Add(obj);
??????????????? }
??????????? }
??????????? return objServerList;
??????? }
??? }
??? /// <summary>
??? /// windows服務接口的結構類
??? /// </summary>
??? public class IServerObj
??? {
??????? private object service;
??????? private string domain;
??????? private string username;
??????? private string userpwd;
??????? public IServerObj(object _service, string _domain,string _username, string _userpwd)
??????? {
??????????? service = _service;
??????????? domain = _domain;
??????????? username = _username;
??????????? userpwd = _userpwd;
??????? }
??????? /// <summary>
??????? /// 服務對象
??????? /// </summary>
??????? public object Service
??????? {
??????????? get {return service; }
??????? }
??????? /// <summary>
??????? /// 服務域
??????? /// </summary>
??????? public string Domain
??????? {
??????????? get { return domain; }
??????? }
??????? /// <summary>
??????? /// 安全帳號
??????? /// </summary>
??????? public string Username
??????? {
??????????? get { return username; }
??????? }
??????? /// <summary>
??????? /// 安全密碼
??????? /// </summary>
??????? public string Userpwd
??????? {
??????????? get { return userpwd; }
??????? }
??? }
??? /// <summary>
??? /// 緩存服務
??? /// </summary>
??? public class CacheConfig
??? {
??????? private XmlNode node;
??????? private object cacheObj = null;
??????? public CacheConfig(XmlNode xml)
??????? {
??????????? node = xml;
??????? }
??????? /// <summary>
??????? /// 獲取緩存對象
??????? /// </summary>
??????? /// <param name="CacheName">緩存名稱</param>
??????? /// <returns></returns>
??????? public object getCache(string CacheName)
??????? {
??????????? if (node != null && node.HasChildNodes)
??????????? {
??????????????? XmlNode nodech = node.SelectSingleNode("http://cache[@name='" + CacheName + "']");
??????????????? string typestr = nodech.Attributes["type"].Value;
??????????????? Type type = Type.GetType(typestr);
??????????????? cacheObj = Activator.CreateInstance(type, null);
??????????? }
??????????? return cacheObj;
??????? }
??? }
}
通過這樣的配置后我們需要的額外信息就可以直接通過這個類找配置文件要了.
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
