您的位置:首页 > 编程语言 > C#

C#如何使用和开发自定义配置节

2015-08-12 17:44 483 查看
在日常的程序设计中,如何灵活和巧妙地运用配置信息是一个成功的设计师的首要选择。这不仅是为了程序设计得更灵活性和可扩展性,也是为了让你的代码给人以清新的感觉。程序中的配置信息一般放在应用程序的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的类

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中设置自定的元素

<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>

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

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元素的名字。

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"; }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: