Как я могу использовать простые валидаторы (не зависящие от свойства) внутри класса флюидного валидатора?

Я использую беглый валидатор для .net, и он отлично работает для проверки состояния всех свойств моих объектов следующим образом:

RuleFor(h => h.Applications).NotEmpty().WithName("Applications");

RuleFor(h => h.OwnerId).GreaterThan(0).WithMessage("You need to choose a owner");

но я обнаружил, что добавляю дополнительную логику проверки в свой класс контроллера (за пределами моего класса свободного валидатора), добавляя код, подобный приведенному ниже, для дополнительной проверки (это не зависит от свойства)

 if (!Model.IsEntitledToEdit(project))
 {
    ModelState.AddModelError(string.Empty, "You are not entitled to save changes.");
}

есть ли способ включить этот тип проверки в класс свободного валидатора (чтобы я мог хранить все свои проверки в одном месте)


person leora    schedule 26.03.2015    source источник


Ответы (1)


Если вы можете получить вызов метода в виде свойства, вы можете это сделать.

Например:

RuleFor(h => h.CanEditFooProjects).Equals(true).WithMessage("You are not entitled to save changes.");

Однако я предполагаю, что такой код:

if (!Model.IsEntitledToEdit(project))

... вероятно, проверяет авторизацию для редактирования объектов «проекта».

Вы можете обернуть бизнес-логику в получателе свойств...

public bool CanEditFooProjects {
    get { 
        if( {some condition}) 
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

... тогда вы могли бы просто определить правило FluentValidation в одном месте.

person Raul Nohea Goodness    schedule 01.04.2015