Элемент конфигурации - комбинация атрибутов?
Скажи, что я определил обычай 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 ответ
Мне пришлось немного почитать, чтобы найти ответы на этот вопрос.
Как насчет добавления проверки 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();
}
Согласно блогу, который я обнаружил, нет более очевидного способа проверки правильности нескольких атрибутов в одном разделе конфигурации, но, похоже, это также верно для элементов конфигурации.