Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielcode-Freigabe eines benutzerdefinierten dynamischen XML-Konfigurationsprogramms

Beispielcode-Freigabe eines benutzerdefinierten dynamischen XML-Konfigurationsprogramms

黄舟
黄舟Original
2017-03-22 16:46:371845Durchsuche

Übersicht

1 Bei der Programmentwicklung verwenden wir häufig die folgenden zwei Grundmodule

1> Legen Sie die Grundparameter des Programms fest, z. B. Paging-Parameter, E-Mail-Parameter usw. ;

2> Bei der Entwicklung basierend auf der tabellengesteuerten Entwicklung wird eine gewisse Beurteilungslogik in die Tabellendaten eingefügt

2 Unter diesen beiden Grundanwendungen haben wir die folgenden Anforderungen:

1> Zentral zu verwalten

2 Um Parameter zu ändern, ohne das System neu zu starten;

Hauptfunktionen des Programms

1> Legen Sie grundlegende Parameter des Programms fest, wie z. B. Paging-Parameter, E-Mail-Parameter usw.;

----Konfiguration automatisch hinzufügen Informationen in XML an die entsprechende Entität.

2> Bei der Entwicklung basierend auf der tabellengesteuerten Entwicklung wird eine gewisse Beurteilungslogik in die Tabellendaten eingefügt.

----Dctionary-Daten automatisch in XML in die entsprechende Entität laden. Allerdings muss diese Methode weiter optimiert werden. Jetzt unterstützt sie nur noch das Laden von Dictionary und muss komplexere Strukturen unterstützen.

Hauptcode

1 Definieren Sie zunächst die Entität und referenzieren Sie sie im Code.

Beispiel

2 Definieren Sie die entsprechende XML-Datei. Unter anderem werden die grundlegenden Konfigurationsinformationen des Programms unter dem Knoten AppSettings
public class AppSetting
{
    public string PageSize;
    public string WebUrl;
 
    public Dictionary<string, string> IsPartialPayment;
    public Dictionary<string, string> EntityCurrency;
}

konfiguriert.

3 Schließlich ist ein Stück XML-Ladecode erforderlich, um die XML-Konfigurationsinformationen in 2 in die Entität in 1 zu laden.
<?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>

Endeffekt
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 Bei der ersten Ausführung des Programms werden die entsprechenden Konfigurationsinformationen ausgegeben

Beispielcode-Freigabe eines benutzerdefinierten dynamischen XML-Konfigurationsprogramms2 Wenn der geänderte Teil Beim Ändern von Parametern können die neuesten Informationen ohne Neustart abgerufen werden. Beachten Sie, dass die Seite aktualisiert wird, nachdem die Parameter 3 Sekunden lang geändert wurden

Das obige ist der detaillierte Inhalt vonBeispielcode-Freigabe eines benutzerdefinierten dynamischen XML-Konfigurationsprogramms. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn