Click here to Skip to main content
15,891,694 members
Articles / Web Development / ASP.NET

Implement ASP.NET custom XML file configuration

Rate me:
Please Sign up or sign in to vote.
4.60/5 (6 votes)
12 Feb 2013CPOL2 min read 23.2K   400   10  
We will see how to implement an ASP.NET web application and have an XML file for configuring some configuration parameters.
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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Bangladesh Bangladesh
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions