using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using System.Xml.Serialization; using CustomXmlConfiguration.Logger; namespace CustomXmlConfiguration.Configs { /// <summary> /// /// </summary> internal sealed class SettingLoader { /// <summary> /// Private constructor /// </summary> private SettingLoader() { } /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public static T LoadConfig<T>() where T : class { return LoadConfig<T>( null ); } /// <summary> /// Return Settings object from cache or from the xml file /// </summary> /// <typeparam name="T">The type we will passing</typeparam> /// <param name="fileName"> </param> /// <returns></returns> /// public static T LoadConfig<T>(string fileName) where T : class { T configObj = null; try { if (string.IsNullOrEmpty(fileName)) { fileName = HttpContext.Current.Server.MapPath (string.Concat("~/", typeof(T).Name, ".config")); } string cacheKey = fileName; // Load the setting object from HttpRuntime Cache if the Settings.xml file is not change recently after last Chache. configObj = HttpRuntime.Cache[cacheKey] as T; if (configObj == null)// Try populate the config from cache { configObj = LoadFromXml<T>(fileName); // insert the config instance into cache use CacheDependency HttpRuntime.Cache.Insert(cacheKey, configObj,new System.Web.Caching.CacheDependency(fileName)); } } catch(Exception ex) { //write error log LogWriter.Instance.WriteToLog(ex.ToString()); return null; } return configObj; } /// <summary> /// Load the settings xml file and retun the Settings Type with Deserialize with xml content /// </summary> /// <typeparam name="T"></typeparam> /// <param name="fileName">File Name of the custom xml Settings file</param> /// <returns>The T type which we have have paased with LoadFromXml<T> </returns> private static T LoadFromXml<T>(string fileName) where T : class { FileStream fs = null; try { //Serialize of the Type XmlSerializer serializer = new XmlSerializer(typeof(T)); fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); return (T)serializer.Deserialize(fs); } catch (Exception ex) { //write error log LogWriter.Instance.WriteToLog(ex.ToString()); return null; } finally { if (fs != null) { fs.Close(); } } } } }
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)