通过Cache机制实现通用的配置管理模块

发表于:2018-6-26 10:47

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:赵思伟    来源:博客园


  .Net Web应用程序提供了很强大的 Web.Config功能,我们很多的系统可能已经习惯在Web.Config中进行配置,可是使用Web.Config进行一些配置,会有一些不太顺畅的特性,比如:修改Web.Config 后,Web应用程序会出现错误页面并且需要重新登录,Web.Config配置过程不是很方便,即使通过安装包进行Web.Config的设置,.Net 安装向导能提供的入口也是有限的。。。。。
  通过Cache机制实现一个通用的配置管理模块
  设计目标:
  1、 高速读取配置信息
  2、 统一的配置维护管理方便进行配置
  3、 新的配置模块及维护不需要再进行二次开发
  大致设计思路
  1、 通过Cache机制对配置文件的内容进行缓存,缓存的失效依赖于配置文件
  2、 在开发基础组件库中实现一个 CacheHelper 类统一读取配置信息
  3、 根据配置文件自动生成配置维护界面,实现统一的配置维护
  代码参考:
  CacheHelper.cs  统一读取配置信息的一个类, 打开配置文件,读取相关的配置信息到HashTable ,并保存到 Cache中,Cache中存在则直接取Cache中的内容,否则重新读取文件,这样做到高速读取。
  using System;
  using System.Collections;
  using System.Web;
  using System.Web.Caching;
  using System.Xml;
  namespace Epower.DevBase.BaseTools
  {
  /// <summary>
  /// ConfigHelper 的摘要说明。
  /// 自定义的系统参数配置文件的读取工具类
  /// </summary>
  public class ConfigHelper
  {
  /// <summary>
  /// 取~/Config/CommonConfig.xml中某个参数名对应的参数值
  /// </summary>
  /// <param name="ParameterName">参数名</param>
  /// <returns>参数值</returns>
  public static string GetParameterValue(string ParameterName)
  {
  return GetParameterValue("EpowerConfig", ParameterName);
  }
  /// <summary>
  /// 取某个参数配置文件中某个参数名对应的参数值
  /// 参数配置文件
  ///        1、必须存放于"~/Config/"目录下面,以.xml为后缀
  ///        2、配置格式参见~/Config/CommonConfig.xml
  /// </summary>
  /// <param name="ConfigName">配置文件的文件名,不要后缀</param>
  /// <param name="ParameterName">参数名</param>
  /// <returns>参数值</returns>
  public static string GetParameterValue(string ConfigName, string ParameterName)
  {
  Hashtable CommonConfig = GetConfigCache(ConfigName);
  if (CommonConfig.ContainsKey(ParameterName))
  return CommonConfig[ParameterName].ToString();
  else
  throw new Exception("参数(" + ParameterName + ")没有定义,请检查配置文件!");
  }
  /// <summary>
  /// 将配置的参数转换成Hashtable并存入缓存,配置文件修改后自动更新缓存
  /// </summary>
  /// <param name="ConfigName"></param>
  /// <returns></returns>
  private static Hashtable GetConfigCache(string ConfigName)
  {
  string CacheName = "Config_" + ConfigName;
  Hashtable CommonConfig = new Hashtable();
  Cache cache = HttpRuntime.Cache;
  if (cache[CacheName] == null)
  {
  string ConfigPath = null;
  #region 取应用程序根物理路径
  try
  {
  ConfigPath = HttpRuntime.AppDomainAppPath;
  }
  catch (System.ArgumentException ex)
  {
  }
  if (ConfigPath == null) throw new Exception("系统异常,取不到应用程序所在根物理路径!");
  #endregion
  string ConfigFile = ConfigPath + "Config\\" + ConfigName + ".xml";
  XmlDocument xmlDoc = new XmlDocument();
  xmlDoc.Load(ConfigFile);
  XmlNode oNode = xmlDoc.DocumentElement;
  if (oNode.HasChildNodes)
  {
  XmlNodeList oList = oNode.ChildNodes;
  for (int i = 0; i < oList.Count; i++)
  {
  CommonConfig.Add(oList[i].Attributes["Name"].Value, oList[i].Attributes["Value"].Value);
  }
  }
  cache.Insert(CacheName, CommonConfig, new CacheDependency(ConfigFile));
  }
  else
  CommonConfig = (Hashtable) cache[CacheName];
  return CommonConfig;
  }
  }
  }
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号