Create Validators
Define context-dependent validation rules.
Goal
Create validator rules that depend on external context or perform async operations.
Prerequisites
- JD.Domain.Rules package installed
- Understanding of invariants
Steps
1. Create Synchronous Validator
var rules = new RuleSetBuilder<Customer>("Default")
.Validator("Email.Unique", c => CheckEmailUnique(c.Email))
.WithMessage("Email already exists")
.Build();
bool CheckEmailUnique(string email)
{
// Check database, external service, etc.
return !existingEmails.Contains(email);
}
2. Create Async Validator
var rules = new RuleSetBuilder<Customer>("Default")
.Validator("Email.Unique", async (c, ctx) =>
await _repository.IsEmailUniqueAsync(c.Email))
.WithMessage("Email already exists")
.Build();
3. Use Context Parameter
.Validator("CanModify", (c, ctx) =>
c.OwnerId == ctx.User.Id)
.WithMessage("You can only modify your own customer record")
Result
Validators enable complex validation that depends on external state or requires I/O operations.
Next Steps
- Create Policies - Authorization rules
- Compose Rules - Combine validators