1

AdapterElement : ConfigurationElementプロパティ、、およびを使用してカスタムをType定義NameしたとしますVersionNameプロパティをVersion一意に識別するため、構成ファイルに次のいずれかの構造を持たせTypeたいと思います。

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

これらの3つのプロパティに簡単にマークを付けて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 に答える