Свободный набор возвращаемых результатов проверки из динамического дочернего средства проверки - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь создать валидатор контекста БД: я хотел бы проверить мои записи сущности, но я не знаю мой валидатор до времени выполнения:

Мой валидатор DbContext выглядит так:

public class DbContextValidator<TContext> : AbstractValidator<TContext>
    where TContext: DbContext
{
    public DbContextValidator(
        EntitySetCollectionValidator<TContext> entitySetCollectionValidator)
    {
        this.RuleFor(c => c.ChangeTracker.Entries()
              .Where(x => (int)x.State > (int)EntityState.Unchanged)
              .Select(g => new EntityEntryContextPair<TContext>(g, c)))
              .SetCollectionValidator(entitySetCollectionValidator);
    }
}

Обычно я бы устанавливал валидатор коллекции напрямую, но так как валидатор коллекции зависит от проверяемой сущности, я не могу этого сделать.Поэтому я создал валидатор, который хотел бы разрешить внутренний валидатор и использовать его для возврата набора результатов:

public class EntitySetCollectionValidator<TContext>
    : AbstractValidator<EntityEntryContextPair<TContext>>
where TContext: DbContext
{
    protected IValidatorProvider _validatorProvider;

    public EntitySetCollectionValidator(IValidatorProvider validatorProvider)
    {
        this.RuleFor(x => x.EntityEntry).Must(this.BeValid);
    }

    private bool BeValid(EntityEntryContextPair<TContext> contextPair, 
        EntityEntry arg)
    {
        var validator = this._validatorProvider.GetValidatorByEntityType(arg.Entity.GetType());
        var results = validator.Validate(contextPair);
        return results.IsValid;
    }
}

Я бы хотел возвращать результаты FluentValidation вместо возврата логического `results.IsValid', и агрегирование сообщений об ошибках.

Как я могу вернуть результаты напрямую?

...