Я использую свободный валидатор для.net, и он отлично работает, чтобы проверить состояние всех свойств моих объектов следующим образом:
RuleFor(h => h.Applications).NotEmpty().WithName("Applications");
RuleFor(h => h.OwnerId).GreaterThan(0).WithMessage("You need to choose a owner");
но я обнаружил, что добавляю дополнительную логику проверки в моем классе Controller (за пределами моего свободного класса проверки), добавляя в код, подобный приведенному ниже, для заклинивания дополнительной проверки (что не является специфичным для свойства)
if (!Model.IsEntitledToEdit(project))
{
ModelState.AddModelError(string.Empty, "You are not entitled to save changes.");
}
есть ли какой-либо способ включить этот тип проверки внутри свободного класса валидатора (так что я могу сохранить всю свою проверку в одном месте)
Если вы можете получить вызов метода в форме свойства, вы можете это сделать.
Например:
RuleFor(h => h.CanEditFooProjects).Equals(true).WithMessage("You are not entitled to save changes.");
Однако, я предполагаю, что код выглядит следующим образом:
if (!Model.IsEntitledToEdit(project))
... вероятно, проверяет полномочия на редактирование объектов проекта.
Вы можете обернуть бизнес-логику в свойствах getter...
public bool CanEditFooProjects {
get {
if( {some condition})
{
return true;
}
else
{
return false;
}
}
}
... тогда вы могли бы иметь правило FluentValidation, просто определенное в одном месте.