在日常的程序设计中,如何灵活和巧妙地运用配置信息是一个成功的设计师的首要选择。这不仅是为了程序设计得更灵活性和可扩展性,也是为了让你的代码给人以清新的感觉。程序中的配置信息一般放在应用程序的app.config或web.config文件中,当然也可以自定义自己的配置文件。这些配置文件是以XML格式进行存储和读取的。微软也封装一些对这些配置文件操作的类,这些类存在于名字空间System.Configuration下,这个命名空间包含提供用于处理配置数据的编程模型的类型,当然为了使用还添加System.Configuration.dll程序集。

现在我们先看一下这个名字空间下的几个重要的类:

1、ConfigurationManager,这个提供用于打开客户端应用程序集的Configuration对象。

2、WebConfigurationMaManager,这个提供用于打开web应用程序集的Configuration对象。

3、ConfigurationSection ,表示配置文件中的节。

4、ConfigurationSectionCollection ,表示配置文件中相关节的集合。

5、ConfigurationSectionGroup ,表示配置文件中的一组相关节。

6、ConfigurationSectionGroupCollection ,表示 ConfigurationSectionGroup 对象的集合。

7、ConfigurationProperty ,表示属性或配置元素的子元素。

8、ConfigurationPropertyAttribute ,以声明方式指示 .NET Framework,以实例化配置属性。

9、ConfigurationElement ,表示配置文件中的配置元素。

10、ConfigurationElementCollection ,表示包含一个子元素集合的配置元素。

当然这里面这常用的是ConfigurationManager类,这个类提供了两个静态常用的静态方法:

object GetSection(string sectionName)用于读取当前应用程序默认配置的指定配置信息;

Configuration OpenExeConfiguration(ConfigurationUserLevel userLevel)将当前应用程序配置文件打开以得到一个Configuration对象。

以及两个静态属性:AppSettins获取当前应用程序默认配置的AppSettingsSection数据;ConnectionStrings获取当前应用程序默认配置的ConnectionStringSection数据。

当然由于AppSettings是一个NameValueCollection对象,因此对它的读取和设置可以直接以AppSettings[“mySet”]的形式得到,相应的在*.config文件中的<appsettings>节下添加<add name=”mySet” value=””/>即可。

要自定义配置节配置元素,就必须要使我们的类分别继承自ConfigurationSection和ConfigurationElement类。那么实现这个两个类的对象就可以加入到配置文件的<configSection>和其他元素节点中。

这儿介绍在配置节点中加入自定义配置信息的能力(元素节点)。

1、实现一个继承自ConfigurationElement和ConfigurationSection的类,并添加的配置属性加上ConfigurationPropertyAttribute特性。

2、添加配置信息。

3、在程序中读取配置信息。

第一步:实现派生自ConfigurationSection和ConfigurationElement的类



Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

-->using System;

using System.Collections;
using System.Text;
using System.Configuration;
using System.Xml;
 
 
namespace MyCustomConfiguration
{
   //自定义配置节
   public class CustomSectionConfiguration : ConfigurationSection
   { 
      public CustomSectionConfiguration() { }
      public CustomSectionConfiguration(string value) { }
      //添加特性ConfigurationPropertyAttribute
      //'customAttribute'是配置文件中的元素
      //'CustomAttribute'是程序中要的属性;
      [ConfigurationProperty("customAttribute", DefaultValue = "", IsRequired = true)]
      public string CustomAttribute
      {
          get { return (string)base["customAttribute"]; }
          set { base["customAttribute"] = value; }
         }
       //添加特性ConfigurationPropertyAttribute
       [ConfigurationProperty("customElement", DefaultValue = "", IsRequired = true)]
       public CustomElementConfiguration CustomElement
        {
           get { return (CustomElementConfiguration)base["customElement"]; }
           set { base["customElement"] = value; }
           }
    }
    
     //自定义配置元素
     public class CustomElementConfiguration : ConfigurationElement
     {
        public CustomElementConfiguration() { }
        public CustomElementConfiguration(string value1, string value2)
        {
            Value1 = value1;
            Value2 = value2;
         }
        [ConfigurationProperty("value1", DefaultValue = "", IsRequired = true)]
        public string Value1
       {
          get { return (string)base["value1"]; }
          set { base["value1"] = value; }
         }
          [ConfigurationProperty("value2", DefaultValue = "", IsRequired = true)]
          public string Value2
          {
             get { return (string)base["value2"];}
              set { base["value2"] = value; }
             }
     }  
 }

第二步:在*.config中设置自定的元素



Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/ --><configuration> <!-- 配置节-->
<configSections>
<sectionGroup name="customGroup">
<section
name="customSection"
type=" MyCustomConfiguration.CustomSectionConfiguration, MyCustomConfiguration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowLocation="true" allowDefinition="everywhere" />
</sectionGroup> ……
<!-- 配置节设置信息 -->
<customGroup>
<customSection customAttribute="Custom">
<customElement Value1=”best" Vaule2=”better”/>
</customSection>
</customGroup> …… </configuration>

第三步:在程序中使用配置信息。



Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

-->MyCustomConfiguration.CustomSectionConfiguration config = (MyCustomConfiguration.CustomSectionConfiguration)System.Configuration.ConfigurationManager.GetSection( "customGroup/customSection");

首先得到配置节对象:         接着就可以使用强名称的对象和属性了。

上面介绍的是单一属性的配置,如果要配置多个对象,那么就得使用System.Configuration.ConfigurationElementCollection,这类的作用是生成多个子对象,也就是在一个标签下可以放置多个System.Configuration.ConfigurationElement对象。

方法同上,我们必须要重写几方法:

ConfigurationElement CreateNewElement()//这个方法的作用是返回子对象实例;

object GetElementKey(ConfigurationElement element);//这个方法的得到对象中的键名;

ConfigurationElementCollectionType CollectionType{get;}//这个属性是定义映射方式;

string ElementName{get;}//这个属性是定义XML元素的名字。



Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

-->protected override ConfigurationElement CreateNewElement()

{
      
return new CustomElementConfiguration ();
}
protected override object GetElementKey(ConfigurationElement element)
{
     return ((CustomElementConfiguration )element).Name;
  }
public override ConfigurationElementCollectionType CollectionType
  {
            get { return ConfigurationElementCollectionType.BasicMap; }
   
}
protected override string ElementName
{
     get { return "collection"; }
}

C#如何使用和开发自定义配置节的更多相关文章

  1. 基于Spring的可扩展Schema进行开发自定义配置标签支持

    一.背景 最近和朋友一起想开发一个类似alibaba dubbo的功能的工具,其中就用到了基于Spring的可扩展Schema进行开发自定义配置标签支持,通过上网查资料自己写了一个demo.今天在这里 ...

  2. C#创建自定义配置节

    在.Net应用程序中,我们经常看到VS为我们生成的项目工程中都会含有nfig或者nfig这样的文件.这个文件就是我们所说的应用程序配置文件.在这个文件里面记述着一些与我们的应用程序相关的信息,如:数据 ...

  3. 使用 ConfigurationSection 创建自定义配置节

    我们可以通过用自己的 XML 配置元素来扩展标准的 ASP.NET 配置设置集,要完成这一功能,我们必须实现继承System.Configuration.ConfigurationSection 类来 ...

  4. C# App.config 自定义 配置节

    1)App.config <?xml version="1.0" encoding="utf-8" ?><configuration>  ...

  5. C# App.config 自定义 配置节 报错“配置系统未能初始化” 解决方法

    App.config,结果运行的时候出现了 "配置系统未能初始化" 的错误.找了半天才发现是下面的原因造成的: "如果配置文件中包含configSections元素,则c ...

  6. .NET:自定义配置节

    背景 对于编译型应用程序来说,参数化程序行为是非常有必要的,.NET有其标准的配置方法,我们可以可以扩展. 示例 代码 using System; using System.Collections; ...

  7. C# App.config 自定义 配置节 出现的问题:配置系统未能初始化

    C# 读取app.config配置文件 节点键值,提示 "配置系统未能初始化" 错误的解决方案 新建C#项目,在app.config中添加了appSettings项,运行时出现&q ...

  8. ASP.NET使用ConfigurationSection在Web.Config创建自定义配置节集合

    核心代码 using System; using System.Data; using System.Configuration; using System.Web; using System.Web ...

  9. ASP.NET使用ConfigurationSection在Web.Config创建自定义配置节

    主要代码,一定要继续System.Configuration.ConfigurationSection,具体的节点名称可以自行修改 using System; using System.Data; u ...

随机推荐

  1. link方式安装Eclispe插件:greenUML

    用Link方式安装Eclipse插件有几点好处: (1)把自己的插件和Eclipse自带的插件分离 (2)可以通过修改link文件来决定是否加载该插件 (3)重新安装Eclipse的时候,直接拷贝自己 ...

  2. [DOM]有一种节点叫做文本节点

    HTML可以看成是由节点(node)组成的树结构 我们一般都是在<p>节点里面写字符串. 在上图中,<p>节点和字符串之间有一个text, 这个text就是文本节点. 我们可以 ...

  3. 一款js控制背景图片平铺

    背景图片的平铺方法有很多种,纯色背景,渐变背景,图片背景,今天讲的是移动端的图片背景~~~~ <style> html,body{;;} .body{background: url(ima ...

  4. php学习日志(2)-php变量

    变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变量(例如:$x=$y+$z).变量的定义主要有以下规则: 变量以$开始,后面跟着变量的名称: 变量名 ...

  5. 我用的一些Node.js开发工具、开发包、框架等总结

    开发工具 1.WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢. 2.做些小型项目用Sublime Text. 3.Browser ...

  6. CentOS7下源码安装mysql5.6

    目录 准备工作 运行环境 确认你的安装版本 下载mysql 安装mysql 准备安装环境 编译和安装 配置mysql 单实例配置      单实例配置方法          添加防火墙         ...

  7. Opencv 的数据结构

    opencv的基本数据结构 结构 成员 意义 CvPoint int x,y 图像中的点 CvPoint2D32f float x,y 二维空间中的点 CvPoint3D32f float x,y,z ...

  8. JavaScript技巧45招

    原文:45 Useful JavaScript Tips, Tricks and Best Practices作者:Saad Mousliki 在这篇文章里,我将分享一些JavaScript的技巧.秘 ...

  9. install ruby and ruby gem

    sudo apt-get install ruby #find an folder and: git clone https://github.com/rubygems/rubygems.git cd ...

  10. Kinetic使用注意点--collection

    new Collection() 扩展了数组,主要用于配合new Container().get()使用 方法: each(func):遍历数组,执行回调函数.回调函数接收两个值,节点和索引. toA ...