FluentValidation вернет ValidationResult
после того, как вы подтвердите свой PersonDest
объект.
Чтобы отобразить этот объект в новом PersonSource
объекте, обогащенном результатами проверки, моя первая мысль будет использовать AutoMapper и предоставить пользовательский конвертер типов . Конвертеры пользовательских типов могут взять ResolutionContext
, который будет контейнером, который вы будете использовать для получения результатов проверки в процессе отображения.
Метод Convert
конвертера будет выглядеть примерно так:
public PersonSource Convert(PersonDest personDest, PersonSource personSource, ResolutionContext context){
if (personSource == null)
{
personSource = new PersonSource();
}
if (personDest == null)
{
return personSource;
}
... PersonDest to PersonSource mapping
var validationResult = (ValidationResult)context.Items["ValidationResult"]
personSource.IsValid = validationResult.IsValid
if (!validationResult.IsValid)
{
personSource.ErrorMessage = string.Join(Environment.NewLine, validationResult.Errors.Select(x => x.ErrorMessage))
}
}
Свойство ResolutionContext.Mapper
обеспечивает доступ к преобразователю, поэтому можно определить базовое отображение c PersonDest to PersonSource в вашем профиле сопоставления и использовать его в преобразователе типов. Вы можете столкнуться с рекурсивным l oop с расширением ConvertUsing
. Поэкспериментируйте и дайте нам знать, как вы go.