class ServerSection : ConfigurationSection
{
private static readonly ConfigurationProperty s_property
= new ConfigurationProperty(string.Empty, typeof(MethodSectionCollection), null,
ConfigurationPropertyOptions.IsDefaultCollection);
[ConfigurationProperty("", Options = ConfigurationPropertyOptions.IsDefaultCollection)]
public MethodSectionCollection KeyValues
{
get
{
return (MethodSectionCollection)base[s_property];
}
}
}
[ConfigurationCollection(typeof(MethodValueSetting))]
public class MethodSectionCollection : ConfigurationElementCollection // 自定义一个集合
{
// 基本上,所有的方法都只要简单地调用基类的实现就可以了。
public MethodSectionCollection()
: base(StringComparer.OrdinalIgnoreCase) // 忽略大小写
{
}
// 其实关键就是这个索引器。但它也是调用基类的实现,只是做下类型转就行了。
new public MethodValueSetting this[string name]
{
get
{
return (MethodValueSetting)base.BaseGet(name);
}
}
// 下面二个方法中抽象类中必须要实现的。
protected override ConfigurationElement CreateNewElement()
{
return new MethodValueSetting();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((MethodValueSetting)element).Method;
}
// 说明:如果不需要在代码中修改集合,可以不实现Add, Clear, Remove
public void Add(MethodValueSetting setting)
{
this.BaseAdd(setting);
}
public void Clear()
{
base.BaseClear();
}
public void Remove(string name)
{
base.BaseRemove(name);
}
}
public class MethodValueSetting : ConfigurationElement // 集合中的每个元素
{
[ConfigurationProperty("method", IsRequired = true)]
public string Method
{
get { return this["method"].ToString(); }
set { this["method"] = value; }
}
[ConfigurationProperty("url", IsRequired = true)]
public string MethodUrl
{
get { return this["url"].ToString(); }
set { this["url"] = value; }
}
}
配置文件中 Conf开头处添加:
<configSections>
<section name="自定义节点类名" type="命名空间.自定义节点类名, 命名空间"/>
</configSections>
在程序中调用:
MethodSection methodConfig = (MethodSection)System.Configuration.ConfigurationManager.GetSection("MethodSection");
foreach(MethodValueSetting method in methodConfig.KeyValues)
{
MethodCollection.Add(method.Method, method.MethodUrl);
}