.NET 配置项扩展

时间:2021-06-26 13:49:54
using System;
using System.Configuration;

namespace ConsoleApplication3
{
/*
web.config 或 app.config 中的配置示例如下(注:configSections 节一定要是 configuration 节下的第一个元素):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="urls" type="ConsoleApplication3.EasConfigurationSection, ConsoleApplication3"/>
</configSections>

<urls>
<url name="cn.bing.com" url="
http://cn.bing.com/" port="80"></url>
</urls>
</configuration>
*/

public class EasConfigurationElement : ConfigurationElement
{
[ConfigurationProperty(
"name", IsKey=true, IsRequired=true)]
public string Name
{
get { return (string)this["name"]; }
set { this["name"] = value; }
}

[ConfigurationProperty(
"url", DefaultValue = "")]
public string Url
{
get { return (string)this["url"]; }
set { this["url"] = value; }
}

[ConfigurationProperty(
"port", DefaultValue = 0, IsRequired = false)]
[IntegerValidator(MinValue
= 0, MaxValue = 8080, ExcludeRange = false)]
public int Port
{
get { return (int)this["port"]; }
set { this["port"] = value; }
}
}

[ConfigurationCollection(
typeof(EasConfigurationElement))]
public class EasConfigurationElementCollection : ConfigurationElementCollection
{
protected override string ElementName
{
get
{
return "url";
}
}

public override ConfigurationElementCollectionType CollectionType
{
get { return ConfigurationElementCollectionType.BasicMap; }
}

protected override ConfigurationElement CreateNewElement()
{
return new EasConfigurationElement();
}

protected override object GetElementKey( ConfigurationElement element )
{
var newElement = element as EasConfigurationElement;

if( newElement != null ) return newElement.Name;

throw new NullReferenceException( "element can not convert to " + typeof( EasConfigurationElement ) );
}

public EasConfigurationElement this[ int index ]
{
get { return (EasConfigurationElement)BaseGet( index ); }
set
{
if( BaseGet( index ) != null )
{
BaseRemoveAt( index );
}

BaseAdd( index, value );
}
}
}

public class EasConfigurationSection : ConfigurationSection
{
[ConfigurationProperty(
"", IsDefaultCollection = true)]
public EasConfigurationElementCollection Urls
{
get
{
var collection = (EasConfigurationElementCollection)base[""];

return collection;
}
}
}
}