我一直在尝试找出如何创建一个 FluentValidation 规则,该规则在验证它的属性之前检查它正在验证的对象的实例是否不为 null。
我宁愿将此空验证封装在验证器中,而不是在调用代码中进行。
请参阅下面的示例代码,并在需要所需逻辑的地方添加注释:
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() 构造函数中检查当前客户实例是否为空,并如果为空则中止进一步的规则处理?
提前致谢。
最佳答案
编辑 2022-07-19
正如一些评论者指出的那样,请查看答案 https://stackoverflow.com/a/52784357/1943对于更新的实现。我没有亲自审查过,但值得先尝试一下。
如果您使用的是旧版本,或者您喜欢怀旧,我下面的原始答案来自 2013 年。
您应该能够覆盖 CustomerValidator
类中的 Validate
方法。
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);
}
}
关于c# - 空对象的 FluentValidation 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17095791/