|
WWW.DBIT.CN 2007-11-23 9:15:50 热度: |
|
|
在开发网站的时候我们常常会用到一些配置文件,在.Net2.0下面微软给我们提供了一个ConfigurationManager这样一个类来管理存储于配置文件中的信息,这样我们将配置项写在web.config 文件的AppSettings这一节里面就可以使用键值直接来访问它了.就象这样System.Configuration.ConfigurationManager.AppSettings["MyNameIs"], 但是这里有个问题就是我们有一些设置希望在运行时可以通过网络访问的形式去作配置而不是手动修改web.config,但是ConfigurationManager并没有给我们提供一个方法来保存我们的设置(或者是我不知道,还有别的方法吧).还有一个原因是因为.Net运行框架会在应用程序启动后自动监视web.config,一旦这个文件被修改应用程序会自动重启这样的话我们的一些状态数据就会丢失,有没有更好的办法呢,其实是有的,我们的解决方案就是使用独立的可读写配置文件.先来看看代码吧.
using System; using System.Web; using System.IO; using System.Xml.Serialization;
namespace GB.Utility { /// /// 全站配置文件读写 /// [Serializable] public class SiteSettings { private static readonly string currentConfigFileName = "GBSettings.config";
#region PublicProperty #region AbsoluteWebRoot private string absoluteWebRoot; /// /// 站点的绝对Url引用 /// public string AbsoluteWebRoot { get { return absoluteWebRoot; } set { absoluteWebRoot = string.IsNullOrEmpty(value) ? string.Empty : value; } } #endregion
#region RelativeWebRoot private string relativeWebRoot; /// /// 站点的相对Url引用 /// public string RelativeWebRoot { get { return relativeWebRoot; } set { relativeWebRoot = string.IsNullOrEmpty(value) ? string.Empty : value; } } #endregion
#region DefaultPageSize private int defaultPageSize; /// /// 默认的分页大小 /// public int DefaultPageSize { get { return defaultPageSize; } set { defaultPageSize = value; } } #endregion
#region DefaultAbstractSize private int defaultAbstractSize; /// /// 默认的摘要长度值 /// public int DefaultAbstractSize { get { return defaultAbstractSize; } set { defaultAbstractSize = value; } } #endregion
#region Theme private string theme; /// /// 风格设定 /// public string Theme { get { return theme; } set { theme = value; } } #endregion #endregion
#region Common Members
#region Private Members private static string _configurationFilePath = System.IO.Path.Combine( System.AppDomain.CurrentDomain.BaseDirectory.Replace("/", System.IO.Path.DirectorySeparatorChar.ToString()), currentConfigFileName); private static SiteSettings _currentConfiguration; #endregion
#region Constructor private SiteSettings() { } #endregion
public static SiteSettings Instance { get { if (_currentConfiguration == null) { Load(); if (_currentConfiguration == null) _currentConfiguration = new SiteSettings(); }
return _currentConfiguration; } }
private static void Load() {
if (!File.Exists(_configurationFilePath)) { throw new Exception("Can't locate config file! Check the config file path."); _currentConfiguration = new SiteSettings(); } else { XmlSerializer ser = new XmlSerializer(typeof(SiteSettings)); StreamReader reader = new StreamReader(_configurationFilePath);
// XML反序列化. _currentConfiguration = (SiteSettings)ser.Deserialize(reader);
reader.Close();
}
}
private static void Load(string configFile)//这个方法如果改为公开方案那么可以在运行时来读取合适的配置文件,这样就避免在布署时修改多个功能项. { _configurationFilePath = configFile; Load(); }
public static void Save() { XmlSerializer ser = new XmlSerializer(typeof(SiteSettings)); FileStream fileOut;
if (!File.Exists(_configurationFilePath)) { fileOut = new FileStream(_configurationFilePath, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.ReadWrite); } else { fileOut = new FileStream(_configurationFilePath, FileMode.Truncate, FileAccess.ReadWrite, FileShare.ReadWrite); }
// Serialize the object in XML to the given file stream. ser.Serialize(fileOut, _currentConfiguration);
// Close the file stream. |
|
|
|
|
|
|
|
|
|