• 配置类的定义与使用


         配置类的使用,可以很方便把程序中需要经常变化常量从配置文件中读取,很多时候,我们要把文件路径,数据库地址,我们程序设置的各种环境变量放到一个配置文件中,使我们程序在使用过程中灵活读取。虽然WEB程序中我们可以把需要的配置节放到webconfig文件中,而且有现成读取方法,可当我们需要大量设置时,显然webconfig不是一个明智的选择,这时就需要我们手动定义一些配置文件,当然我们也需要自定义配置类。

        首先配置文件,我们需要的是一个XML文件,因为.net中有很多读取XML文件方式,手工写起来还有好多工具可用,而且也符合我们的使用习惯。看以下配置文件

        

    代码
    1 <?xml version="1.0"?>
    2 <Settings>
    3 <TopMenu id="User" name="用户昵称" title="用户昵称">
    4 <LeftMenu id="EditProfile" name="基本信息" title="基本信息" url="/Users/Manages/baseinfo.aspx">
    5 </LeftMenu>
    6 <LeftMenu id="EditCharacter" name="详细信息" title="详细信息" url="/Users/Manages/Editinfo.aspx">
    7 </LeftMenu>
    8 </TopMenu>
    9 </Settings>

         我们的配置类,需要的一个静态类,最好是sealed,因为我们不需要它继承。我们可以随时读取信息,XML的读取,如果再细的话,我们可以把读取XML信息缓冲起来,不用频繁从外设读取文件,节省时间,如果配置文件发生变化呢,我们当然可以在缓冲时从文件依赖,一个小小的配置类详细设计时,里面包含不少设计模式。

         

    代码
    publicsealedclass Settings
    {
    #region Member variables & constructor
    privatestatic Settings instance =null;
    Dictionary
    <string, string> settings =null;
    public Settings(XmlDocument doc)
    {
    settings
    =new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
    XmlNode root
    = doc.SelectSingleNode("Settings");
    foreach (XmlNode n in root.ChildNodes)
    {
    if (n.NodeType != XmlNodeType.Comment)
    {
    string name = n.Attributes["name"].Value.ToLower();
    string setting = n.Attributes["value"].Value;
    if (!settings.ContainsKey(name))
    {
    settings.Add(name, setting);
    }
    }
    }
    }

    #endregion
    #region GetConfig
    publicstatic Settings GetConfig()
    {
    if (instance ==null)
    {
    string file =null;
    Configurations config
    = Configurations.GetConfig();
    string configFile = config.SettingsConfigPath;
    HttpContext context
    = HttpContext.Current;
    if (context !=null)
    file
    = context.Server.MapPath("~/"+ configFile);
    XmlDocument doc
    =new XmlDocument();
    doc.Load(file);
    instance
    =new Settings(doc);
    }
    return instance;
    }

    #endregion

    #region Public properties

    publicstring GetSetting(string key)
    {
    if (settings.ContainsKey(key))
    {
    return settings[key];
    }
    returnstring.Empty;
    }
    #endregion
    }

         以上代码的可扩展如果我们增加一些重载方法,因为我们读取不全是string 可能是bool 或其它的,我们如果多个不同 配置文件,而且作用不用,我们需要一个大的局配置类把这些配置类再次包装起来,读时分门别类使用方便,配置类简单,可不简约。

  • 相关阅读:
    POJ3666 Making the Grade[动态规划]
    vector内部的实现1
    win32概述
    stl概述
    C++概要简介
    类的常量成员
    模板
    c11标准
    异常处理
    pak文件的打包和解包
  • 原文地址:https://www.cnblogs.com/shouhongxiao/p/1703238.html
Copyright © 2020-2023  润新知