J'ai deux champs et j'ai besoin de générer un attribut, en utilisant la validation Microsoft Enterprise Library, de sorte que l'un ou l'autre ait une valeur, mais les deux ne peuvent pas être nuls en même temps.L'une ou l'autre doit avoir une valeur mais les deux ne peuvent pas être null en même temps
Répondre
Utilisez un validateur personnalisé.
[HasSelfValidation]
public class ValidateMe {
[SelfValidation]
public void ValidateFieldNotNul(ValidationResults validationResults)
{
.. start psudo code
if(xor)
validationResults.AddResult(new ValidationResult("One must not be null",...));
}
}
La validation Application Block a une PropertyComparisonValidator
qui vous permettra de comparer une propriété avec un autre. Malheureusement, ce validateur ne permet qu'un ComparisonType
de: Equal, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual
donc cela ne vous aide pas vraiment.
Je pense que vous avez 2 options:
- auto validation
- sur mesure Validator
auto validation (indiqué par @Nix) est probablement le plus facile, mais, il faudrait que cela soit pour réimplémentée chaque scénario où vous avez cette exigence (au moins pour mettre les hameçons à appeler une méthode commune).
La création d'un custom validator donnerait un code qui pourrait être ajouté à la configuration ou attribué directement aux entités et qui pourrait facilement être réutilisé.
Un validateur personnalisé sera certainement plus de travail, mais peut-être en vaut la peine si vous avez besoin de la réutiliser (il peut être réutilisé entre les applications, par exemple) ou préférez ce design.