Skip to content

Instantly share code, notes, and snippets.

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