FluentValidation - POCO с правилами, которые зависят от значений, хранящихся в базе данных. Как справиться с этим дизайном?

Я использую FluentValidator для проверки достоверности части автомобиля. Есть некоторые числовые переменные, которые иногда должны быть больше 0, когда? Когда в базе данных строка для такого рода части имеет некоторые значения.

Я хочу, чтобы класс CarItem был как можно проще. В идеале это будет POCO со свойством IsValid.

Проблема, которую я думаю, что я должен сделать какую-то инъекцию репозитория в POCO, чтобы получить правила валидатора. Какой шаблон дизайна вы предлагаете мне для этой цели? Мне не очень нравится идея вводить репозиторий в сущность, так как это усложняется....

public class CarPiece //this tries to be a POCO!!
{
    public double HP{ get; set; }
    public double EngineConsumtion{ get; set; }

    public bool IsValid {
        get
        {
            CarPieceValidator carpieceValidator = new CarPieceValidator();
            ValidationResult results = carpieceValidator .Validate(this);
            return results.IsValid;
        }
    }
    public List<string> ValidationErrors
    {
        get
        {
            CarPieceValidator carpieceValidator = new CarPieceValidator ();
            ValidationResult results = carpieceValidator .Validate(this);
            return results.Errors.Select(x => x.ErrorCode +" "+ x.ErrorMessage ).ToList();
        }
    }


    public class CarPieceValidator : AbstractValidator<CarPiece>
    {

        public CSOItemSupplierValidator(IRepository repository)
        {
            foreach(IConfig configuration in repository.Configurations)
            {
               RuleFor(item => item.HP).LessThanOrEqualTo(configuration.MaxHp).When(item.Id= configuration==id) ;
            }

        }
    }

0 ответов

Другие вопросы по тегам