Используя результаты свободного в конвейере валидации Mediatr, чтобы вернуть результат C#

Место общения программистов C#
Ответить
Anonymous
 Используя результаты свободного в конвейере валидации Mediatr, чтобы вернуть результат

Сообщение Anonymous »

Во -первых, я использую Fluent Result в сочетании с Mediatr и Fluent Validation < /p>
Я изначально следил за этой статьей, но вместо переосмысления колеса я начал использовать Fluentresults в моем трубопроводе по проверке бегства. Полем В основном все ответы, исходящие от моих запросов CQRS, обернуты в объект результата, это позволяет избежать необходимости работать за исключением в качестве метода обработки ошибок. < /P>
Однако я не могу получить свой трубопровод Играйте хорошо: < /p>
public class ValidationPipeline
: IPipelineBehavior
where TResponse : class
where TRequest : IRequest
{
private readonly IValidator _compositeValidator;

public ValidationPipeline(IValidator compositeValidator)
{
_compositeValidator = compositeValidator;
}

public async Task Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate next)
{
var result = await _compositeValidator.ValidateAsync(request, cancellationToken);

if (!result.IsValid)
{
Error error = new Error();
var responseType = typeof(TResponse);

foreach (var validationFailure in result.Errors)
{
Log.Warning($"{responseType} - {validationFailure.ErrorMessage}");
error.Reasons.Add(new Error(validationFailure.ErrorMessage));
}
// This always returns null instead of a Result with errors in it.
var f = Result.Fail(error) as TResponse;
return f;

}

return await next();
}
}

Я также должен каким -то образом преобразовать объект результата обратно в перевозку, где нарушение всегда является результатом
Любые предложения высоко ценятся!
Редактировать: < /p>
autofac Integration < /p>
protected override void Load(ContainerBuilder builder)
{
var assembly = Assembly.GetExecutingAssembly();

// MediatR
builder.AddMediatR(assembly);
// Register the Command's Validators (Validators based on FluentValidation library)
builder.RegisterAssemblyTypes(assembly)
.Where(t => t.IsClosedTypeOf(typeof(IValidator)))
.AsImplementedInterfaces();
// Register all the Command classes (they implement IRequestHandler) in assembly holding the Commands
builder.RegisterAssemblyTypes(assembly)
.AsClosedTypesOf(typeof(IRequestHandler));
// Register Behavior Pipeline
builder.RegisterGeneric(typeof(ValidationPipeline)).As(typeof(IPipelineBehavior));

}


Подробнее здесь: https://stackoverflow.com/questions/628 ... -resulttre
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»