【问题标题】:Key-less elements in ConfigurationElementCollectionConfigurationElementCollection 中的无键元素
【发布时间】:2014-12-24 08:28:05
【问题描述】:

当你继承 ConfigurationElementCollection 时:

public class Directories : ConfigurationElementCollection
{
    ...
}

ConfigurationElementCollection 需要 GetElementKey(System.Configuration.ConfigurationElement) 的实现。

但我不关心键,因为我有一个这样的自定义配置部分:

<directorySection>
  <directories>
    <directory pickUpDirectory="C:\Users\User\Documents\PickUp\0" dropOffDirectory="C:\Users\User\Documents\DropOff\0"/>
    <directory pickUpDirectory="C:\Users\User\Documents\PickUp\0" dropOffDirectory="C:\Users\User\Documents\DropOff\0"/>
    <directory pickUpDirectory="C:\Users\User\Documents\PickUp\1" dropOffDirectory="C:\Users\User\Documents\DropOff\1"/>
    <directory pickUpDirectory="C:\Users\User\Documents\PickUp\2" dropOffDirectory="C:\Users\User\Documents\DropOff\2"/>
  </directories>
</directorySection>

它可以有多个元素,每个元素都是无键的,这种结构应该允许重复(如上)。那么在这种情况下我该怎么办呢?

【问题讨论】:

  • 那么不要继承ConfigurationElementCollection :) 使用另一种方式来解析/生成您的xml。
  • @L.B 我本来打算走那条路,但现在好像我别无选择;自定义 .config 部分没有开箱即用的支持吗?
  • 您是否尝试过仅读取自定义部分的应用程序配置文件并将其反序列化为适合您需要的任何类?
  • @Louis 我认为 L.B.建议这个
  • 也许我误解了@L.B 的答案,我觉得它更通用。现在我读了我的,它实际上并没有那么不同。无论如何,只要你知道 XML 结构,你根本不需要实现 ConfigurationElement。例如,您始终可以使用 Linq XML 读取 ApplicationSettings["directories"]。也许我没有看到您的要求?

标签: c# .net configuration config custom-configuration


【解决方案1】:

尝试像这样使用ObjectIDGenerator

[ConfigurationCollection(typeof(SchedulerTaskItem), AddItemName = "Task")]
public class SchedulerTaskCollection: ConfigurationElementCollection
{
    private static readonly ObjectIDGenerator idGenerator = new ObjectIDGenerator();

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

    protected override object GetElementKey(ConfigurationElement element)
    {
        bool firstTime;
        return idGenerator.GetId(element, out firstTime);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多