科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件.NET 2.0 中的自定义配置处理

.NET 2.0 中的自定义配置处理

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

现代软件开发中,各种技术、技巧越来越依赖配置

作者:钟峰 来源:中汉软件有限公司 2007年11月3日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
节点集合

  创建派生自 ConfigurationElementCollection 的类,在派生类中必须重写(override)的抽象方法:

protected abstract ConfigurationElement CreateNewElement()

  在从配置文件加载集合时,会调用该方法以创建各个元素。重写该方法以创建特定类型的自定义 ConfigurationElement 对象。

protected abstract object GetElementKey(ConfigurationElement element)

  在派生类中重写时获取指定配置元素的键值。

  对于非默认的节点集合类,还必须重写 CollectionType 和 ElementName 只读属性的getter,其代码可能如下:

protected override string ElementName
{
 get
 {
  return "dataProvider"; //"dataProvider" replace with your elementName in collection.
 }
}

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

  可以重写 ThrowOnDuplicate 只读属性的getter,以指示当向 ConfigurationElementCollection 添加重复的 ConfigurationElement 是否会导致引发异常。默认情况,只有当该元素的 CollectionType 值为 AddRemoveClearMap 或 AddRemoveClearMapAlternate 时才会引发异常,如果希望非默认节点集合不接受重复项(通常如此),那么就必须重写该属性的getter,始终返回真(true)。

  请注意,键和值都相同的元素不会被视为重复元素,而是接受此类元素且不出现提示,只有键相同而值不同的元素才被视为是重复元素。原因是这些元素不会进行竞争。但是,无法添加键相同而值不同的元素,因为无法从逻辑上确定哪个竞争值有效。

  索引器的设计模式

  通常需要定义索引器的两个重载(overloads),一个接受整型数下标的可读写的索引器;一个是接受字符串键值的只读索引器。

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);
 }
}

  其他事项

  通常还需要公开一些对集合操作的方法,大致如下:

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();
}

  总结

  这只是我想要撰写的有关 .NET 2.0 中的基础技术篇文章中的第一篇。在这篇文章中,我介绍了有关配置方面的一些基本概念,并阐述了在 .NET 2.0 中如何定制你自己的配置处理程序,以及这过程中需要注意的一些细节问题。您已经看到,通过对 .NET 2.0 中提供的基础架构的扩展,我们可以很容易完成特性化的配置定制。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章