C# ConfigurationManager.GetSection跳过重复项

C# ConfigurationManager.GetSection跳过重复项,c#,.net,xml,configuration-files,C#,.net,Xml,Configuration Files,长话短说,.NetConfigurationManager.GetSection方法跳过重复项,我正在寻找处理此问题的最佳实践。我有一个配置文件,其中包括以下内容: <views> <view name="BusinessUnitsView" Desc="desc1"/> <view name="BusinessUnitsView" Desc="desc2"/> </views> 我有一个配置加载到的对象图,其

长话短说,.Net
ConfigurationManager.GetSection
方法跳过重复项,我正在寻找处理此问题的最佳实践。我有一个配置文件,其中包括以下内容:

   <views>
     <view name="BusinessUnitsView" Desc="desc1"/>
     <view name="BusinessUnitsView" Desc="desc2"/>
   </views>

我有一个配置加载到的对象图,其中集合派生自我们的
ConfigurationElementCollection
派生版本。加载上述内容后,图中的视图集合中只有一项——我的理解是,
ConfigurationManager
就是这样处理重复项的。最后一个具有相同密钥的项目获胜

我可以使用BaseAdd(element,true)在发现重复项时引发异常。但是,如果可能的话,我希望在服务层读取配置时,让对象完全加载副本,并且我希望在服务的消费端检测和处理问题


我是否有修改添加到收集工作的方式的选项?

您需要创建自己的
配置部分
。请参阅或(第二个链接的方法已被弃用,但仍有可能有所帮助)


这允许您将内部配置变量表示为集合,并设置属性,如
DefaultValue
IsRequired

也许您只想迭代列表,但配置的主要思想是您可以这样做

var view = SomeConfigClass["BusinessUnitsView"];

这只允许一个答案

顺便说一句,这是一个不支持重复的bug。。。我知道默认配置节处理程序的内部变量使用NameValueCollections,并且应该在逗号分隔的字符串中连接多个值。我不知道他们为什么不这样做,但我也有同样的问题。我想这是故意的,最后一个很重要。想想Machine.configure,故意让它这样做是有道理的。。。奇怪的是,文档总是说,当为键添加多个值时,会得到一个逗号分隔的值列表。也许这个想法被废弃了,但文档从未更新过?詹姆斯,我对文档不太熟悉。但是,当我看到示例XML时,我只能想:您不希望这样。这里的名字和ID差不多。我同意,正如我写的,多个值没有意义。。。不过,我可以看到需要多个值的情况。在任何情况下,OP都希望读取多个值。。。客户总是对的;)文档中没有说设置将有多个值。。。只有一个值,一个字符串。它所说的是,该字符串将是一个逗号分隔的列表,其中包含您设置的所有值。我可以看到各种各样的问题;也许这就是为什么他们没有这么做?