国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

自定義XML動態配置程序

2019-11-17 03:21:47
字體:
來源:轉載
供稿:網友

自定義xml動態配置程序

2014-02-12 20:33 by Mike.Jiang, ... 閱讀, ... 評論, 收藏, 編輯

概述

1 在做程序開發時,我們往往要用到如下兩個基本模塊

1> 設置程序的基礎參數,如分頁的參數、郵件參數等;

2> 在基于表驅動開發時,即把一些判斷的邏輯放在表數據中;

2 在這兩個基本應該中,我們有如下的需求:

1> 要集中管理;

2> 要可配置,即不重起系統的情況下,修改參數;

3> 易于使用。

程序的主要功能

1> 設置程序的基礎參數,如分頁的參數、郵件參數等;

----將XML中配置信息自動加到對應的實體上。

2> 在基于表驅動開發時,即把一些判斷的邏輯放在表數據中;

----將XML中的Dctionary 數據自動加載到對應的實體上。但此方法需要繼續優化,現在僅支持加載Dictionary,需要支持更復雜的結構。

主要代碼

1 首先定義,在代碼中引用實體。

示例

    public class AppSetting    {        public string PageSize;        public string WebUrl;        public Dictionary<string, string> IsPartialPayment;        public Dictionary<string, string> EntityCurrency;    }

2 定義與之對應的XML文件。 其中,程序的基本配置信息配置在AppSettings

節點下面。

<?xml version="1.0" encoding="utf-8" ?><settings>  <DictSettings>    <Dict name="AppSettings" >      <add key="PageSize" value="2"></add>      <add key="WebUrl" value="www.baidu.com"></add>    </Dict>    <Dict name="IsPartialPayment">      <add key="TTPART" value="true"></add>      <add key="TT50/50" value="true"></add>    </Dict>    <Dict name="EntityCurrency">      <add key="China" value="CNY"></add>      <add key="HQ" value="USD"></add>      <add key="Default" value="USD"></add>    </Dict>  </DictSettings></settings>

3 最后需要一段XML加載代碼,把2中的XML配置信息加載到1 中的實體中去。

public static class ConfigManager    {        public static AppSetting AppSetting;        PRivate static string xmlPath;        public static Dictionary<string, Dictionary<string, string>> DictAppSettings = new Dictionary<string, Dictionary<string, string>>();        static ConfigManager()        {            xmlPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory.ToString(), "AppConfig.xml");            LoadSettings(xmlPath);        }        private static void LoadSettings(string path)        {            DictAppSettings.Clear();            //加載XML中所有的key,value,并轉換成Dictionary對象            XmlNode dictRootNode = FileHelper.GetXMLNode(path, "/settings/DictSettings");            foreach (XmlNode dictType in dictRootNode.ChildNodes)            {                Dictionary<string, string> dict = new Dictionary<string, string>();                foreach (XmlNode dictItem in dictType.ChildNodes)                {                    dict.Add(dictItem.Attributes["key"].Value.Trim(), dictItem.Attributes["value"].Value.Trim());                }                DictAppSettings.Add(dictType.Attributes["name"].Value.Trim(), dict);            }            //將Dictionary 對象轉換成實體的字段和對應dctionary上            var serializer = new javaScriptSerializer();            //將AppSettings轉成json            string jAppSetting = serializer.Serialize(DictAppSettings["AppSettings"]);            DictAppSettings.Remove("AppSettings");            //將除AppSettings中的信息轉成json            string jDict = serializer.Serialize(DictAppSettings);            //將AppSettings和其它的Dictionary 加載到對應的實體中去。            string json = string.Format("{0},{1}", jAppSetting.Remove(jAppSetting.Length - 1), jDict.Remove(0, 1));            AppSetting = serializer.Deserialize<AppSetting>(json);            //當修改文件時,重新加載XML            FileHelper.CacheDependencyFile(path, CacheRemovedCallback);        }        private static void CacheRemovedCallback(string key, object value, CacheItemRemovedReason reason)        {            //此方法來自Fish.Li            string xmlFilePath = (string)value;            // 由于事件發生時,文件可能還沒有完全關閉,所以只好讓程序稍等。            System.Threading.Thread.Sleep(3000);            LoadSettings(xmlFilePath);        }    }    public static class FileHelper    {        public static XmlNode GetXMLNode(string path, string xPath)        {            XmlDocument xmlDoc = new XmlDocument();            xmlDoc.Load(path);            return xmlDoc.SelectSingleNode(xPath);        }        public static void CacheDependencyFile(string path, CacheItemRemovedCallback removedCallback)        {            CacheDependency dep = new CacheDependency(path);            HttpRuntime.Cache.Insert(Guid.NewGuid().ToString(), path, dep,                Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, removedCallback);        }    }

最終效果

1 當程序第一次運行時,輸出對應的配置信息

2 當修改部分參數時,無需重啟,即可獲得最新的信息。注意,當修改參數3秒后,再刷新頁面

完整代碼下載


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新源县| 乐昌市| 望谟县| 正阳县| 南投县| 荆门市| 全州县| 阜宁县| 淄博市| 广安市| 通城县| 绥芬河市| 永定县| 郴州市| 渭源县| 靖边县| 澄江县| 大宁县| 金乡县| 永定县| 永善县| 延寿县| 黎平县| 当涂县| 商丘市| 常德市| 彰化市| 怀仁县| 泰兴市| 泉州市| 息烽县| 南安市| 安平县| 和顺县| 东莞市| 固阳县| 九江市| 石渠县| 永胜县| 焦作市| 莆田市|