使用Reflection的自定义验证属性?

时间:2012-02-22 14:53:50

标签: c# validation attributes annotations

我想使用System.ComponentModel.DataAnnotations程序集来验证我正在处理的控制台应用程序的参数(映射到属性)。我将使用“伙伴类”元数据模式;它过去对我很有用。

我需要验证的一件事是提供了两种类型的参数中的一种。换句话说,可以指定参数foo或参数bar,但不能同时指定参数CompareAttribute,也不能同时指定。

为此,我开始编写一个自定义验证属性,这似乎相当简单,但当我意识到我需要到达验证上下文的属性之外时,我有点迷失,并遍历到对象中的兄弟属性我我正在验证(如/// <summary> /// This property, or the other specified, are required, but both cannot be set. /// </summary> [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] public class XORAttribute : ValidationAttribute { /// <summary> /// If validation should fail, return this error message. /// </summary> public string ErrorMessage { get; set; } /// <summary> /// The name of the other required property that is mutually exclusive of this one. /// </summary> public string OtherValueName { get; set; } public XORAttribute(string otherValueName) { this.OtherValueName = otherValueName; } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { //Something needs to go here. } } )。这似乎是一个经典的反思案例,但我正在摸索如何继续前进。这就是我到目前为止所做的:

{{1}}

这里的一些帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)