Несколько типов ConfigurationElement в ConfigurationElementCollection - PullRequest
4 голосов
/ 11 июня 2009

Я хотел бы иметь раздел конфигурации, подобный следующему:

<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 ]

3 голосов
/ 12 января 2011

Что еще можно сделать, это переопределить OnDeserializeUnrecognizedElement . Таким образом, вы можете создать элемент ParametersConfigurationElement следующим образом:

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

OnDeserializeUnrecognizedElement принимает XmlReader , который вы можете узнать об атрибутах пользовательского элемента. Используя TypeConverter.ConvertFromInvariantString (вы можете получить TypeConverter от TypeDescriptor.GetConverter ), вы даже можете поддерживать типы типа DateTime и Uri без каких-либо дополнительных усилий.

2 голосов
/ 19 октября 2010

Да, это возможно! Проверьте это сообщение для деталей:

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

В том же духе здесь решение, которое позволяет вам читать чрезвычайно гибкий XML с помощью IConfigurationSectionHandler: http://alt.pluralsight.com/wiki/default.aspx/Craig/XmlSerializerSectionHandler.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...