Как зарегистрировать IPipelineBehavior посредника в Autofac - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь понять, как настроить поведение конвейера с помощью посредника.

Моя команда:

public class MyUpdateCommand : IRequest<CommandResult>
{
   // fields       
}

Мой обработчик:

public class MyUpdateCommandHandler : RequestHandler<MyUpdateCommand, CommandResult>
{
    private readonly IMyRepository _repository;

    public GasDetailsUpdateCommandHandler(IMyRepository repository)
    {
        _repository = repository;
    }

    protected override CommandResult HandleCore(MyUpdateCommand command)
    {  
        {
            _repository.Update(command);
            return CommandResult.Success;
        }
    }
}

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

public class ExceptionLoggingBehavior<TRequest, TResponse> 
   : IPipelineBehavior<TRequest, TResponse> where TResponse : CommandResult
{
    private readonly ILog _logger;

    public ExceptionLoggingBehavior(ILog logger)
    {
        _logger = logger;
    }

    public async Task<TResponse> Handle(TRequest request, 
       CancellationToken cancellationToken, RequestHandlerDelegate<TResponse> next)
    {
        try
        {
            return await next();
        }
        catch (Exception ex)
        {
            _logger.Error(ex.Message);
            return (TResponse) CommandResult.Fail(ex.Message);
        }
    }
}

Что мне нужно добавить в мой контейнер управления (AutoFac)?

...