Skip to content

Instantly share code, notes, and snippets.

@AlonAm
Created December 17, 2015 20:50
Show Gist options
  • Save AlonAm/94d2c6ceaab0c5407434 to your computer and use it in GitHub Desktop.
Save AlonAm/94d2c6ceaab0c5407434 to your computer and use it in GitHub Desktop.
public class AsyncMediatorPipeline<TRequest, TResponse> : IAsyncRequestHandler<TRequest, TResponse>
where TRequest : IAsyncRequest<TResponse>
{
private readonly IAsyncRequestHandler<TRequest, TResponse> _inner;
private readonly IAsyncPreRequestHandler<TRequest>[] _preRequestHandlers;
private readonly IAsyncPostRequestHandler<TRequest, TResponse>[] _postRequestHandlers;
public AsyncMediatorPipeline(
IAsyncRequestHandler<TRequest, TResponse> inner,
IAsyncPreRequestHandler<TRequest>[] preRequestHandlers,
IAsyncPostRequestHandler<TRequest, TResponse>[] postRequestHandlers)
{
_inner = inner;
_preRequestHandlers = preRequestHandlers;
_postRequestHandlers = postRequestHandlers;
}
public async Task<TResponse> Handle(TRequest message)
{
foreach (var preRequestHandler in _preRequestHandlers)
{
await preRequestHandler.Handle(message);
}
var result = await _inner.Handle(message);
foreach (var postRequestHandler in _postRequestHandlers)
{
await postRequestHandler.Handle(message, result);
}
return result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment