Элемент конфигурации - комбинация атрибутов? - PullRequest
1 голос
/ 22 января 2012

Скажите, что я определил пользовательский AdapterElement : ConfigurationElement со свойствами Type, Name и Version. Поскольку Name и Version уникально идентифицируют свойство Type, я бы хотел принудительно установить файл конфигурации, чтобы иметь одну из следующих структур:

<adapter type="TypeOfAdapter"/>
<adapter name="NameOfAdapter" version="VersionOfAdapter"/>

Я мог бы легко пометить эти три свойства с помощью IsRequired = false и позволить пользователям указать желаемую комбинацию. Однако следующие комбинации недопустимы, и я хотел бы запретить их:

<adapter type="TypeOfAdapter" version="VersionOfAdapter"/>
<adapter type="TypeOfAdapter" name="NameOfAdapter"/>

Есть ли простой способ добиться этого?

1 Ответ

1 голос
/ 22 января 2012

Мне пришлось немного почитать, чтобы найти ответы на этот вопрос.

Как насчет добавления проверки PostDeserialise на валидность в ваш класс AdapterElement?

protected override void PostDeserialize()
{
   bool isValid = Type != null && Name == null && Version == null
               || Type == null && Name != null && Version != null;
   if (!isValid)
   {
      throw new ArgumentException("Must specify either Type or Name and Version");
   }
   base.PostDeserialize();
}

Согласно блогу, который я обнаружил , нет более очевидного способа проверки достоверности нескольких атрибутов в одном разделе конфигурации - но, похоже, это также верно для элементов конфигурации.

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