Vue d'ensemble
1 Lors du développement de programmes, nous utilisons souvent les deux modules de base suivants
1> ;
2> Lors du développement basé sur un développement basé sur une table, une certaine logique de jugement est placée dans les données de la table
2 Parmi ces deux applications de base, nous avons les exigences suivantes :
1> Pour être géré de manière centralisée; 2> Pour être configurable, c'est-à-dire pour modifier les paramètres sans redémarrer le système; Pour être facile à utiliser; Fonctions principales du programme1> Définir les paramètres de base du programme, tels que les paramètres de pagination, les paramètres de courrier électronique, etc. ----Ajouter automatiquement la configuration ; informations en XML à l'entité correspondante. 2> Lors du développement basé sur un développement basé sur une table, une certaine logique de jugement est placée dans les données de la table ----Charger automatiquement les données de dictionnaire en XML dans l'entité correspondante ; Cependant, cette méthode doit continuer à être optimisée. Désormais, elle ne prend en charge que le chargement du dictionnaire et doit prendre en charge des structures plus complexes. Code principal1 Définissez d'abord, référencez l'entité dans le code. Exemplepublic class AppSetting { public string PageSize; public string WebUrl; public Dictionary<string, string> IsPartialPayment; public Dictionary<string, string> EntityCurrency; }
<?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>
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); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!