我有两个字段,我需要使用Microsoft Enterprise Library验证生成一个属性,以便任何一个或必须有一个值,但两者不能同时为null。
答案 0 :(得分:1)
使用自定义验证器。
[HasSelfValidation]
public class ValidateMe {
[SelfValidation]
public void ValidateFieldNotNul(ValidationResults validationResults)
{
.. start psudo code
if( xor)
validationResults.AddResult( new ValidationResult("One must not be null",...));
}
}
答案 1 :(得分:0)
验证应用程序块有PropertyComparisonValidator
,可让您将一个属性与另一个属性进行比较。不幸的是,此验证程序仅允许ComparisonType
:Equal, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual
,因此这实际上对您没有帮助。
我认为你有两个选择:
自我验证(由@Nix显示)可能是最简单的,但是需要在你有这个要求的每个场景中重新实现它(至少要把钩子调用一个常用的方法)。
创建custom validator会导致代码可以添加到配置中或直接在实体上归属,并且可以轻松重复使用。
自定义验证器肯定会更有效,但如果您需要重用(例如,可以在应用程序之间重复使用)或者更喜欢该设计,那么它可能是值得的。