public async Task ProcessAsync <T>(T command)
        {
            var handler = (IHandleCommandsAsync <T>)_commandHandlerFactory.CreateAsync <T>();

            var attributes = GetAttributes <T>(handler);

            RunBeforeAttributes(command, attributes);

            await handler.Handle(command);

            _commandHandlerFactory.Dispose(handler);

            RunPostAttributesAndDispose(command, attributes);
        }