1

假设我已经定义了一个AdapterElement : ConfigurationElement带有属性的自定义TypeName并且Version. 由于Name并且Version唯一地标识了该Type属性,我想强制配置文件具有以下结构之一:

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

我可以轻松地标记这三个属性,IsRequired = false并让用户指定想要的组合。但是,以下组合无效,我想禁止它们:

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

有什么简单的方法可以实现这一目标吗?

4

1 回答 1

1

我不得不做一些阅读才能找到关于这个的答案。

如何为您的 AdapterElement 类添加 PostDeserialise 检查有效性?

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();
}

根据博客,我发现没有更明显的方法可以验证单个配置部分上的多个属性的有效性——但对于配置元素来说似乎也是如此。

于 2012-01-22T16:32:48.170 回答