目前xVal.RuleProviders.DataAnnotationsRuleProvider
只关注模型类本身定义的属性。您可以GetRulesFromProperty
在规则提供程序基类的方法中看到这一点PropertyAttributeRuleProviderBase
:
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
. 它获取System.Type
具有方法的类型参数GetInterfaces
。