概述
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秒后,再革新页面
以上就是自定义XML动态设置顺序的示例代码分享的细致内容,更多请关注ki4网别的相干文章!