namespace Toolkit.Framework.Foundation; public class CommandClassHandlerWrapper where TRequest : class, ICommand { private readonly MessageHandlerDelegate handler; public CommandClassHandlerWrapper(ICommandHandler concreteHandler, IEnumerable> pipelineBehaviours) { MessageHandlerDelegate handler = concreteHandler.Handle; foreach (IPipelineBehavior? pipeline in pipelineBehaviours.Reverse()) { MessageHandlerDelegate handlerCopy = handler; IPipelineBehavior pipelineCopy = pipeline; handler = (TRequest message, CancellationToken cancellationToken) => pipelineCopy.Handle(message, cancellationToken, handlerCopy); } this.handler = handler; } public ValueTask Handle(TRequest request, CancellationToken cancellationToken) => handler(request, cancellationToken); }