Comment puis-je utiliser la Validation des Données d'Attributs en C# dans un non-ASP.net contexte?
Je voudrais utiliser la validation des données d'attributs dans une bibliothèque de l'assemblée, de sorte que tout consommateur de données peut valider sans l'aide d'un ModelBinder (dans une application console, par exemple). Comment puis-je le faire?
Vous devez vous connecter pour publier un commentaire.
En fait c'est assez cool. Je l'ai utilisé dans un PAM de validation de la mise en œuvre récemment. La plupart des gens finissent par écrire beaucoup de code à l'aide de la réflexion pour parcourir les attributs, mais il y a un construit en fonction pour cela.
Vous pouvez également valider les attributs sur une seule propriété nommée. Vous pouvez également passer d'une liste afin d'accéder aux messages d'erreur :
La
System.ComponentModel.DataAnnotations.ValidationAttribute
classes ontIsValid
méthodes qui effectuent la logique de validation. Ils prennent un Objet (la valeur du champ ils décorent) et retourtrue
oufalse
.Vous pouvez utiliser ces attributs, et un peu de réflexion, de faire votre propre orientée aspect du programme de validation. Passez votre programme de validation d'un objet, et le programme de validation d'une liste de
PropertyInfo
s etFieldInfo
s. Pour chacun de ces cas, il peut appelerGetCustomAttributes
à regarder pour ceux qui héritent deValidationAttribute
, et pour chacun de ces cas, l'appelIsValid
, en passant la valeur de la propriété ou sur le terrain. Cela peut être fait totalement dynamiquement sans connaître la structure de la classe pour être validé au moment de la conception.TryValidateProperty
passant une instance aléatoire deValidationAttribute
à effectuer sur?TryValidateProperty
est juste mal écrit, vous devez sauter à travers des cerceaux pour obtenir de travailler à l'extérieur d'un Contrôleur, et même alors, si vous l'utiliser deux fois, il va finir tranquillement réglage ModelState valide/invalide et arrêter alterring cet état, et d'arrêter de retourner des résultats précis à partir de là.J'ai donné sur elle et vient d'écrire mon propre programme de validation. Ce sera une boucle sur tout un ensemble d'objets dans n'importe quel contexte et de vous dire s'ils sont valides: