2010-08-23 3 views
1
class Employee 
{ 
    [ValueNotEmpty("Empty strings not allowed"] 
    public string Name{get;set;} 
} 

"ValueNotEmpty" est une coutume attribute.I essayé d'utiliser la bibliothèque YABOV mais je dois appeler Valider la méthode de la classe de base explicitement pour valider les attributs personnalisés et retourner les messages de validation.Validating C champs # de classe à l'aide personnalisée attibutes

Dans la classe de mise en œuvre, j'utiliser la réflexion pour définir des valeurs sur "Name" field.When i mis en valeur sur le terrain "Name" Je pense que le bloc try de lancer une exception en disant "Empty strings not allowed" .est-il possible que je peux le faire sans appeler explicitement méthode pour valider la classe lorsque je définis la valeur pour le champ ?.

Répondre

0

Quelques réflexions à ce problème:

Si votre propriété appelle un événement PropertyChanged, il pourrait y avoir un mécanisme qui utilise pour valider. Par exemple en combinaison avec la liaison de données. Si vous n'avez pas PropertyChanged, vous devez appeler explicitement quelque part Validate, sauf si vous utilisez AOP. L'exécution du code lorsque vous venez de définir une valeur nécessite un AOP. Dans les bibliothèques standard .Net, il n'y a pas de technologie AOP incluse, il faudrait en intégrer une (par exemple Spring). AOP nécessite la génération de code ou l'amélioration du code octet. Ce n'est donc pas une chose triviale.

+0

Stefan, merci pour la réponse.J'ai près de 40 classes et chaque classe contient 10 à 15 propriétés.Je voulais automatiser la validation au lieu d'utiliser "IF", mais je suppose que vous avez raison, explicitement la méthode de validation devrait être appelé. – Webbies

0

Vous pouvez essayer d'hériter de IDataErrorInfo et de l'implémentation ci-dessous, mais je suppose que c'est ce que vous voulez dire en appelant la validation explicitement.

public class Employee : IDataErrorInfo 
{ 
    public string Name{get;set;} 

    string IDataErrorInfo.Error {get {return null;}} 

    string IDataErrorInfo.this[string propertyName] 
    { 
    get { return this.GetValidationError(propertyName);} 
    } 

    string GetValidationError(string propertyName) 
    { 
    string error = null; 
    switch(propertyName) 
    { 
     case "Name": 
     error = ValidateName(); 
     break; 
    default: 
     error = "Unknown proeprty"; 
     break; 
    } 
    } 

    string ValidateName() 
    { 
    if(!string.IsNullOrEmpty(this.Name)) 
    { 
     return null; 
    } 
    return "Empty Name"; 
    } 
} 
Questions connexes