.NET 2.0 中的自定义配置处理
节点集合
创建派生自 ConfigurationElementCollection 的类,在派生类中必须重写(override)的抽象方法:
对于非默认的节点集合类,还必须重写 CollectionType 和 ElementName 只读属性的getter,其代码可能如下:
请注意,键和值都相同的元素不会被视为重复元素,而是接受此类元素且不出现提示,只有键相同而值不同的元素才被视为是重复元素。原因是这些元素不会进行竞争。但是,无法添加键相同而值不同的元素,因为无法从逻辑上确定哪个竞争值有效。
索引器的设计模式
通常需要定义索引器的两个重载(overloads),一个接受整型数下标的可读写的索引器;一个是接受字符串键值的只读索引器。
通常还需要公开一些对集合操作的方法,大致如下:
这只是我想要撰写的有关 .NET 2.0 中的基础技术篇文章中的第一篇。在这篇文章中,我介绍了有关配置方面的一些基本概念,并阐述了在 .NET 2.0 中如何定制你自己的配置处理程序,以及这过程中需要注意的一些细节问题。您已经看到,通过对 .NET 2.0 中提供的基础架构的扩展,我们可以很容易完成特性化的配置定制。
创建派生自 ConfigurationElementCollection 的类,在派生类中必须重写(override)的抽象方法:
在从配置文件加载集合时,会调用该方法以创建各个元素。重写该方法以创建特定类型的自定义 ConfigurationElement 对象。protected abstract ConfigurationElement CreateNewElement()
在派生类中重写时获取指定配置元素的键值。protected abstract object GetElementKey(ConfigurationElement element)
对于非默认的节点集合类,还必须重写 CollectionType 和 ElementName 只读属性的getter,其代码可能如下:
可以重写 ThrowOnDuplicate 只读属性的getter,以指示当向 ConfigurationElementCollection 添加重复的 ConfigurationElement 是否会导致引发异常。默认情况,只有当该元素的 CollectionType 值为 AddRemoveClearMap 或 AddRemoveClearMapAlternate 时才会引发异常,如果希望非默认节点集合不接受重复项(通常如此),那么就必须重写该属性的getter,始终返回真(true)。protected override string ElementName
...{
get
...{
return "dataProvider"; //"dataProvider" replace with your elementName in collection.
}
}
![]()
public override ConfigurationElementCollectionType CollectionType
...{
get
...{
return ConfigurationElementCollectionType.BasicMap;
}
}
请注意,键和值都相同的元素不会被视为重复元素,而是接受此类元素且不出现提示,只有键相同而值不同的元素才被视为是重复元素。原因是这些元素不会进行竞争。但是,无法添加键相同而值不同的元素,因为无法从逻辑上确定哪个竞争值有效。
索引器的设计模式
通常需要定义索引器的两个重载(overloads),一个接受整型数下标的可读写的索引器;一个是接受字符串键值的只读索引器。
其他事项索引器#region 索引器
public DataProviderElement this[int index]
...{
get
...{
return (DataProviderElement)BaseGet(index);
}
set
...{
if(BaseGet(index) != null)
BaseRemoveAt(index);
![]()
BaseAdd(index, value);
}
}
![]()
public new DataProviderElement this[string name]
...{
get
...{
return (DataProviderElement)BaseGet(name);
}
}
#endregion
通常还需要公开一些对集合操作的方法,大致如下:
总结对集合操作#region 对集合操作
public int IndexOf(DataProviderElement value)
...{
return BaseIndexOf(value);
}
![]()
public void Add(DataProviderElement value)
...{
BaseAdd(value);
}
![]()
public void Remove(DataProviderElement value)
...{
if(BaseIndexOf(value) >= 0)
BaseRemove(value.Name);
}
![]()
public void Remove(string name)
...{
BaseRemove(name);
}
![]()
public void RemoveAt(int index)
...{
BaseRemoveAt(index);
}
![]()
public void Clear()
...{
BaseClear();
}
#endregion
这只是我想要撰写的有关 .NET 2.0 中的基础技术篇文章中的第一篇。在这篇文章中,我介绍了有关配置方面的一些基本概念,并阐述了在 .NET 2.0 中如何定制你自己的配置处理程序,以及这过程中需要注意的一些细节问题。您已经看到,通过对 .NET 2.0 中提供的基础架构的扩展,我们可以很容易完成特性化的配置定制。
0
相关文章
