zoukankan      html  css  js  c++  java
  • [转]C#中使用自定义配置(app.config)

    先来看一个常见的配置文件模板:

    <configuration>
        <configSections>    //配置节声明区域,包含配置节和命名空间声明
            <section>              //配置节声明
                <sectionGroup/>       //定义配置节组
            </section>       //配置节组中的配置节声明
        </configSections>
        <appSettings/> //预定义配置节
        <Custom element for configuration section>  //配置节设置区域
    </configuration>

    自定义配置可分为:自定义配置节和自定义配置节组。

    1. 自定义配置节

    要使用自定义配置需要修改两处地方,一是在<configSections/>中声明配置节,二是在<Custom element for configuration section>处设置配置节的具体配置。

    声明配置节语法:

    <section name="" type=""/>

    <section>:声明新配置节

    name:自定义配置节的名称

    type:自定义配置节的类型,主要包括System.Configuration.SingleTagSectionHandler、System.Configuration.DictionarySectionHandler、System.Configuration.NameValueSectionHandler。

    SingleTagSectionHandler 配置节返回类型为 Systems.Collections.IDictionary
    DictionarySectionHandler 配置节返回类型为 Systems.Collections.IDictionary
    NameValueSectionHandler 配置节返回类型为 Systems.Collections.Specialized.NameValueCollection

    下面是一个完整的自定义配置节示例代码:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="UrlString" type="System.Configuration.SingleTagSectionHandler"/>
        <section name="UrlString2" type="System.Configuration.DictionarySectionHandler"/>
      </configSections>
      <UrlString action="add" paramString="id=1"></UrlString>
      <UrlString2>
        <add key="add" value="id=1"/>
        <add key="edit" value="id=2"/>
      </UrlString2>
    </configuration>

    程序中读取配置代码如下:

            static void Main(string[] args)
            {
                //访问 UrlString 配置节
                IDictionary dict = ConfigurationManager.GetSection("UrlString") as IDictionary;
                Console.WriteLine(string.Format("{0}?{1}", dict["action"], dict["paramString"]));

                //访问 UrlString2 配置节
                IDictionary dict2 = ConfigurationManager.GetSection("UrlString2") as IDictionary;
                foreach (DictionaryEntry e in dict2)
                {
                    Console.WriteLine(string.Format("{0}?{1}", e.Key, e.Value));
                }

                Console.Read();
            }

    2. 自定义配置节组

    配置节组是使用<sectionGroup>元素来声明,在配置节组中可以包括多个配置节<section>,如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <sectionGroup name="TestGroup">
                <section name="Test" type="System.Configuration.NameValueSectionHandler"/>
            </sectionGroup>
        </configSections>
        <TestGroup>
            <Test>
                <add key="Hello" value="World"/>
            </Test>
        </TestGroup>
    </configuration>

    下面是访问这个配置节组的代码:

    NameValueCollection nc=(NameValueCollection)ConfigurationSettings.GetConfig("TestGroup/Test");
    MessageBox.Show(nc.AllKeys[0].ToString()+" "+nc["Hello"]);    //输出Hello World

    3. 通过 IConfigurationSectionHandler 接口实现自定义配置处理类

    IConfigurationSectionHandler 接口原型:

    public interface IConfigurationSectionHandler
    {
        Object Create(Object parent, Object configContext, XmlNode section)
    }

    Create 方法必须可由多个线程同时调用,即要保证线程安全。

    示例代码:

        public class UrlString : IConfigurationSectionHandler
        {

            private string _action;

            public string Action
            {
                get { return _action; }
                set { _action = value; }
            }

            private string _param;

            public string Param
            {
                get { return _param; }
                set { _param = value; }
            }

            #region IConfigurationSectionHandler 成员

            public object Create(object parent, object configContext, XmlNode section)
            {
                Hashtable hashtable = new Hashtable();
                foreach (XmlAttribute attribute in section.Attributes)
                {
                    hashtable[attribute.Name] = attribute.Value;
                }
                return hashtable;
            }

            #endregion

            public static UrlString Create()
            {
                UrlString us = new UrlString();
                Hashtable ht = ConfigurationManager.GetSection("UrlString") as Hashtable;
                us.Action = (string)ht["action"];
                us.Param = (string)ht["paramString"];
                return us;
            }
        }

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/educast/archive/2008/09/06/2890102.aspx

  • 相关阅读:
    sas中一些小的选项的含义
    C++变量学习点
    sas,log,output,ods输出管理(html output_object output_statement)
    matlab统计函数
    sas条件判断语句where,if的区别,以及where选项
    sas数组,数组的语法与一些特殊定义,获取维度大小
    sas赋值语句,累加语句,keep,drop,rename,(retain/sum statement)
    解决Xcode 4.3.2的"Could not insert new outlet connection"问题
    网络数据的XML解析
    将UIView中的图像保存到相册
  • 原文地址:https://www.cnblogs.com/kk1230/p/1519386.html
Copyright © 2011-2022 走看看