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