ConfigurationElementCollection中的多个ConfigurationElement类型

时间:2009-06-10 20:56:19

标签: .net app-config

我想有一个如下配置部分:

<mycollection>
 <add name="myelement" type="class, assembly" var1="value" var2="value" />
 <add name="myelement2" type="class2, assembly" var1="value" var3="value" var4="value" />
</mycollection>

这个想法是创建的实际ConfigurationElement由类型值定义,并且每个元素都有自己的特定属性集。

另一种选择是所有元素都相同,但它们从不同的配置部分加载值,例如:

<mycollection>
 <add name="myelement" configuration="myothersection" />
 <add name="myelement2" configuration="myothersection2" />
</mycollection>

<myothersection type="class, assembly" var1="value" var2="value" />

这似乎更容易实现,但会导致更详细的配置文件。

第一个选择是否符合.NET配置模式,其次,这可能吗?

2 个答案:

答案 0 :(得分:3)

您可以做的其他事情是覆盖OnDeserializeUnrecognizedElement。这样你就可以像这样创建一个ParametersConfigurationElement:

<parameters>
  <string name="Patrick Huizinga" />
  <string country="the Netherlands" />
  <int currentScore="206" />
</parameters>

OnDeserializeUnrecognizedElement采用XmlReader,您可以查询自定义元素的属性。通过使用TypeConverter.ConvertFromInvariantString(您可以从TypeConverter获得TypeDescriptor.GetConverter),您甚至可以毫不费力地支持DateTime和Uri等类型。

答案 1 :(得分:2)

是的,这是可能的!查看此帖子了解详情:

http://code.dblock.org/2009/02/18/nesting-multiple-configurationelement-types-in-a-configurationelementcollection.html

这里有一个解决方案,允许您使用IConfigurationSectionHandler读取极其灵活的xml: http://alt.pluralsight.com/wiki/default.aspx/Craig/XmlSerializerSectionHandler.html