2012-02-22 3 views
0

Je souhaite utiliser l'assembly System.ComponentModel.DataAnnotations pour valider les arguments (mappés sur les propriétés) d'une application de console sur laquelle je travaille. Je vais utiliser le modèle de métadonnées "buddy class"; ça a bien marché pour moi dans le passé. L'une des choses que je dois valider est que l'un des deux types d'arguments est fourni. En d'autres termes, l'argument foo peut être spécifié, ou l'argument bar, mais pas les deux et pas l'un ni l'autre. À cette fin, j'ai commencé à écrire un attribut de validation personnalisé, qui semblait assez simple, mais je me suis un peu perdu quand j'ai réalisé que je devais atteindre la propriété du contexte de validation, et traverser vers une propriété frère dans l'objet Je valide (comme le CompareAttribute). Il semble que ce soit un cas de réflexion classique, mais je me gratte la tête quant à la façon de procéder. C'est ce que j'ai pour l'instant:Attribut de validation personnalisé à l'aide de Reflection?

/// <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. 
    } 
} 

Une assistance serait appréciée ici.

+0

Vraiment? Pas de preneurs? J'aurais supposé que c'était une question facile pour ppl expérimenté dans la validation. –

Répondre

Questions connexes