c# Pseudo-code
If I have a class
class Person
{
string Name
date DOB
Address address
}
I can make a PersonValidator to validate Person
but since Address is a complex type, and sometimes I want to validate it separately, I have a PersonValidator and an AddressValidator. Question is, how do I use my AddressValidator inside my PersonValidator?
class PersonValidator : AbstractValidator<Person>
{
PersonValidator()
{
RuleFor(c => c.Name).NotEmpty();
var addressValidator = new AddressValidator();
addressValidator.Validate( person.address ) // ???
}
}
You can invoke the .SetValidator(IValidator)
method.
class PersonValidator : AbstractValidator<Person>
{
PersonValidator()
{
// CascadeMode = CascadeMode.StopOnFirstFailure;
RuleFor(c => c.Name)
.NotEmpty().WithErrorCode("name_required");
// Checks that the IEnumerable<Address> has at least 1 item
RuleFor(c => c.Address)
.NotEmpty().WithErrorCode("addresses_required");
RuleForEach(c => c.Address)
.SetValidator(new AddressValidator());
}
}
class AddressValidator : AbstractValidator<Address>
{
AddressValidator()
{
// CascadeMode = CascadeMode.Continue;
RuleFor(c => c.Postcode)
.NotEmpty().WithErrorCode("postcode_required");
}
}