Извините, я новичок в конфигурационных файлах и xml.
Этот пример близок к тому, что я хочу: Правильно ли реализован пользовательский раздел конфигурации с вложенными коллекциями? (state-county-example). К сожалению, код, отображаемый там, показывает множество cs-файлов в целом. Пожалуйста, не вините меня в этом.
Однако , я не нашел пример, используя конфигурационный файл, как показано ниже - где (в моем случае) элемент ExpectedColums может ЛИБО включать в себя столбцы, содержащие перечисление ИЛИ, содержащие только любой текст с необязательным префиксом-текстом.
Пример: Предположим, что у нас есть какая-то таблица и мы хотим настроить связанную parser.
<?xml version="1.0" encoding="utf-8" ?>
<TableParserConfig>
<ExpectedColumns>
<Column title="ID" type="string" isKeyColumn="Yes" isMandatory="Yes"/>
<Prefix text="any prefix">
</Column>
<Column title="She likes me" type="string" isKeyColumn="No" isMandatory="Yes"/>
<SingleState state="Undefined">
<SingleState state="No">
<SingleState state="Yes">
</Column>
</ExpectedColumns>
</TableParserConfig>
То, что я пробовал: Близко к примеру, на который ссылается приведенная выше ссылка. Но я реализовал абстрактный базовый класс и использовал их дочерние элементы для различия между Prefix элементами и SingleState элементами - оба наследуются от класса ConfigurationElement .
Итак, классы кода ниже являются аналоговыми классами usaStateDefinitionConfigElement кода, на который ссылается ссылка выше.
Чего я не понимаю: Мне интересно как между двумя детьми можно различить по отражению, если оба получают один и тот же текст в виде строки через 1-й параметр атрибута?
Мои вопросы:
- Является ли такой "случай ИЛИ" возможен в файле конфигурации?
- Если "да", как реализовать связанный код позади?
- См. Выше "Что я не понимаю".
- Если "нет", как получить вариант "или", легкий для понимания (в лучшем случае случай самоочевидный) для программиста, конфигурирующего без больших знаний о коде позади?
- Относительно топи c: есть ли общее или существенное различие между «возможными макетами» в xml по сравнению с конфиг-файлами?
- Если да, то нужно ли мне обходиться путем использования xml -файлов? (используя другое пространство имен)
Часть моей реализации:
using System.Configuration
namespace MyTableExample
{
public class SingleStateConfigElement : AbstractConfigElement
{
private const string _columnPropertyName = "ExpectedCollumns";
[ConfigurationProperty(_columnPropertyName, IsDefaultCollection = false)]
public override AbstractConfigElement ExpectedColumn
{
get { return (SingleStateConfigElement)base[_columnPropertyName]; }
set { this[_columnPropertyName] = value; }
}
}
public class CommonContentConfigElement : AbstractConfigElement
{
private const string _columnPropertyName = "ExpectedCollumns";
[ConfigurationProperty(_columnPropertyName, IsDefaultCollection = false)]
public override AbstractConfigElement ExpectedColumn
{
get { return (CommonContentConfigElement)base[_columnPropertyName]; }
set { this[_columnPropertyName] = value; }
}
}
public abstract class AbstractConfigElement : ConfigElement
{
...
private const string _isMandatory = "isMandatory";
...
[ConfigurationProperty(_isMandatory, IsRequired = false)]
public bool IsMandatory
{
get { return (bool)base[_isMandatory]; }
set { this[_isMandatory] = value; }
}
public abstracte AbstractConfigElement ExpectedColumn { get; set;}
}
}