真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何自定義XML動態(tài)配置程序

這篇文章給大家分享的是有關(guān)如何自定義XML動態(tài)配置程序的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、虛擬主機、營銷軟件、網(wǎng)站建設(shè)、清遠網(wǎng)站維護、網(wǎng)站推廣。

概述

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

1> 設(shè)置程序的基礎(chǔ)參數(shù),如分頁的參數(shù)、郵件參數(shù)等;

2> 在基于表驅(qū)動開發(fā)時,即把一些判斷的邏輯放在表數(shù)據(jù)中;

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

1> 要集中管理;

2> 要可配置,即不重起系統(tǒng)的情況下,修改參數(shù);

3> 易于使用。

程序的主要功能

1> 設(shè)置程序的基礎(chǔ)參數(shù),如分頁的參數(shù)、郵件參數(shù)等;

----將XML中配置信息自動加到對應(yīng)的實體上。

2> 在基于表驅(qū)動開發(fā)時,即把一些判斷的邏輯放在表數(shù)據(jù)中;

----將XML中的Dctionary 數(shù)據(jù)自動加載到對應(yīng)的實體上。但此方法需要繼續(xù)優(yōu)化,現(xiàn)在僅支持加載Dictionary,需要支持更復(fù)雜的結(jié)構(gòu)。

主要代碼

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

示例

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

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

節(jié)點下面。



  
    
      
      
    
    
      
      
    
    
      
      
      
    
  

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

public static class ConfigManager
    {
        public static AppSetting AppSetting;
        private static string xmlPath;
 
        public static Dictionary> DictAppSettings = new Dictionary>();
        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,并轉(zhuǎn)換成Dictionary對象
            XmlNode dictRootNode = FileHelper.GetXMLNode(path, "/settings/DictSettings");
            foreach (XmlNode dictType in dictRootNode.ChildNodes)
            {
                Dictionary dict = new Dictionary();
                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 對象轉(zhuǎn)換成實體的字段和對應(yīng)dctionary上
            var serializer = new JavaScriptSerializer();
            //將AppSettings轉(zhuǎn)成json
            string jAppSetting = serializer.Serialize(DictAppSettings["AppSettings"]);
            DictAppSettings.Remove("AppSettings");
            //將除AppSettings中的信息轉(zhuǎn)成json
            string jDict = serializer.Serialize(DictAppSettings);
            //將AppSettings和其它的Dictionary 加載到對應(yīng)的實體中去。
            string json = string.Format("{0},{1}", jAppSetting.Remove(jAppSetting.Length - 1), jDict.Remove(0, 1));
            AppSetting = serializer.Deserialize(json);
 
            //當修改文件時,重新加載XML
            FileHelper.CacheDependencyFile(path, CacheRemovedCallback);
        }
 
        private static void CacheRemovedCallback(string key, object value, CacheItemRemovedReason reason)
        {
            //此方法來自Fish.Li
            string xmlFilePath = (string)value;
 
            // 由于事件發(fā)生時,文件可能還沒有完全關(guān)閉,所以只好讓程序稍等。
            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 當程序第一次運行時,輸出對應(yīng)的配置信息

如何自定義XML動態(tài)配置程序

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

如何自定義XML動態(tài)配置程序

感謝各位的閱讀!關(guān)于“如何自定義XML動態(tài)配置程序”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


網(wǎng)站名稱:如何自定義XML動態(tài)配置程序
標題鏈接:http://weahome.cn/article/gicsgi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部