現時点では、xVal.RuleProviders.DataAnnotationsRuleProvider
は、モデルクラス自体で定義されたプロパティのみを参照します。あなたはルールプロバイダベースクラスPropertyAttributeRuleProviderBase
方法GetRulesFromProperty
でこれを見ることができます:
protected virtual IEnumerable<Rule> GetRulesFromProperty(
PropertyDescriptor propertyDescriptor)
{
return from att in propertyDescriptor.Attributes.OfType<TAttribute>()
from validationRule in MakeValidationRulesFromAttribute(att)
where validationRule != null
select validationRule;
}
propertyDescriptor
パラメータはモデルクラス内のプロパティを表し、そのAttributes
プロパティは、プロパティ自体に直接定義された属性のみを表しています。
もちろん、DataAnnotationsRuleProvider
を拡張し、適切なメソッドをオーバーライドして、必要な処理を行うことができます。実装されたインターフェイスから検証属性を抽出します。 XVALを使用して、ルールのプロバイダを登録それから:
ActiveRuleProviders.Providers.Clear();
ActiveRuleProviders.Providers.Add(new MyDataAnnotationsRuleProvider());
ActiveRuleProviders.Providers.Add(new CustomRulesProvider());
実装されたインタフェースのプロパティから属性を取得するには、DataAnnotationsRuleProvider
を拡張し、GetRulesFromTypeCore
をオーバーライドする必要があります。メソッドGetInterfaces
を持つタイプSystem.Type
のパラメータを取得します。
詳細な回答ありがとうございました!私は次の質問があると思います:クラスが実装するインターフェイスを反復する簡単な方法はありますか?インターフェイスの各プロパティのPropertyDescriptorsを取得するには、これを行う必要があります。 – NathanD
タイプの実装されたインターフェイスを取得する方法に関する情報を追加しました。 –
かなり簡単ですね、ありがとう! – NathanD