namespace Toolkit.Foundation; public class HandlerWrapper(IHandler handler, IEnumerable> pipelineBehaviours) where TRequest : class { private readonly IEnumerable> pipelineBehaviours = pipelineBehaviours.Reverse(); public async Task Handle(TRequest request, CancellationToken cancellationToken) { HandlerDelegate currentHandler = handler.Handle; foreach (IPipelineBehaviour behaviour in pipelineBehaviours) { HandlerDelegate previousHandler = currentHandler; currentHandler = async (args, token) => { return await behaviour.Handle(args, previousHandler, token); }; } return await currentHandler(request, cancellationToken); } }