在复杂类型上面重用验证器。 例如,假如我们有两个类 Customer 和 Address:
public class Customer
{
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Line1 { get; set; }
public string Line2 { get; set; }
public string Town { get; set; }
public string County { get; set; }
public string Postcode { get; set; }
}
接下来我们定义一个 AddressValidator
public class AddressValidator : AbstractValidator<Address>
{
public AddressValidator()
{
RuleFor(address => address.Postcode).NotNull();
//etc
}
}
我们可以在CustomerValidator里面重用AddressValidator
public class CustomerValidator : AbstractValidator<Customer>
{
public CustomerValidator()
{
RuleFor(customer => customer.Name).NotNull();
RuleFor(customer => customer.Address).SetValidator(new AddressValidator());
}
}
当我们调用 CustomerValidator Validate
方法的时候。 CustomerValidator会被先调用,然后 AddressValidator.
这两个的验证的结果也会被自动合并到同一个ValidationResult里面。
如果这个子属性Address为Null的话,这个Address验证器不会被执行。
如果不想用 子验证器的话,我们还可以直接为子类的属性定义验证规则。如下
RuleFor(customer => customer.Address.Postcode).NotNull()
在这种情况,这个验证器并不会判断 address是不是为Null。我们需要自己添加一个条件。
RuleFor(customer => customer.Address.Postcode).NotNull().When(customer => customer.Address != null)