public string HasMaterialPublishedElseWhereText { get; set; }
public string DtPublishedTimeText { get; set; }
public class EntityValidator : AbstractValidator<Entity>
RuleFor(x => x.DtPublishedTimeText)
.When(HasMaterialPublishedElseWhereText)
.WithMessage("Required Field")
.WithMessage("Must be date");
RuleFor(x => x.DtPublishedTimeText)
.WithMessage("Required Field")
.WithMessage("Must be date")
.When(HasMaterialPublishedElseWhereText);
private bool BeAValidDate(string val)
return DateTime.TryParse(val, out date);
private bool HasMaterialPublishedElseWhereText(Entity model)
return model.HasMaterialPublishedElseWhereText != null &&
model.HasMaterialPublishedElseWhereText.Equals("yes");
public static void Main()
var entityValidator = new EntityValidator();
HasMaterialPublishedElseWhereText = "yes",
DtPublishedTimeText = "2015-10-23"
HasMaterialPublishedElseWhereText = "no",
DtPublishedTimeText = "---"
var yesResult = entityValidator.Validate(yesEntity, ruleSet: "Rule1");
var noResult = entityValidator.Validate(noEntity, ruleSet: "Rule1");
Console.WriteLine("Rule1 yesEntity valid: " + yesResult.IsValid);
foreach (var error in yesResult.Errors)
Console.WriteLine(" Error: " + error.ErrorMessage);
Console.WriteLine("Rule1 noEntity valid: " + noResult.IsValid);
foreach (var error in noResult.Errors)
Console.WriteLine(" Error: " + error.ErrorMessage);
yesResult = entityValidator.Validate(yesEntity, ruleSet: "Rule2");
noResult = entityValidator.Validate(noEntity, ruleSet: "Rule2");
Console.WriteLine("Rule2 yesEntity valid: " + yesResult.IsValid);
foreach (var error in yesResult.Errors)
Console.WriteLine(" Error: " + error.ErrorMessage);
Console.WriteLine("Rule2 noEntity valid: " + noResult.IsValid);
foreach (var error in noResult.Errors)
Console.WriteLine(" Error: " + error.ErrorMessage);