我一直在尝试弄清楚如何创建一个 FluentValidation 规则,在验证其属性之前检查它正在验证的对象的实例是否不为空。
我宁愿将这个空验证封装在验证器中,而不是在调用代码中执行它。
请参阅下面的示例代码,其中包含需要所需逻辑的注释:
namespace MyNamespace
{
using FluentValidation;
public class Customer
{
public string Surname { get; set; }
}
public class CustomerValidator: AbstractValidator<Customer>
{
public CustomerValidator()
{
// Rule to check the customer instance is not null.
// Don't continue validating.
RuleFor(c => c.Surname).NotEmpty();
}
}
public class MyClass
{
public void DoCustomerWork(int id)
{
var customer = GetCustomer(id);
var validator = new CustomerValidator();
var results = validator.Validate(customer);
var validationSucceeded = results.IsValid;
}
public Customer GetCustomer(int id)
{
return null;
}
}
}
所以我的问题是如何在 CustomerValidator() 构造函数中检查客户的当前实例不为 null and 如果为空则中止进一步的规则处理?
提前致谢。
编辑 2022-07-19
正如一些评论者指出的那样,请查看答案https://stackoverflow.com/a/52784357/1943 https://stackoverflow.com/a/52784357/1943以获得更新的实施。我没有亲自审查过,但值得先尝试一下。
如果您使用的是旧版本,或者您喜欢怀旧,下面我的原始答案来自 2013 年。
您应该能够覆盖Validate
方法在你的CustomerValidator
class.
public class CustomerValidator: AbstractValidator<Customer>
{
// constructor...
public override ValidationResult Validate(Customer instance)
{
return instance == null
? new ValidationResult(new [] { new ValidationFailure("Customer", "Customer cannot be null") })
: base.Validate(instance);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)