public async Task MovesMessageToErrorQueueAsExpected()
    {
        var message   = NewMessage("known-id");
        var exception = new IOException("æi altså");

        await WithContext(async context =>
        {
            await _handler.HandlePoisonMessage(message, context, exception);
        });

        var failedMessage = _network.GetNextOrNull("error");

        Assert.That(failedMessage, Is.Not.Null);
        Assert.That(failedMessage.Headers[Headers.MessageId], Is.EqualTo("known-id"));
    }
        public async Task HandlePoisonMessage(TransportMessage transportMessage, ITransactionContext transactionContext, Exception exception)
        {
            await _innerHandler.HandlePoisonMessage(transportMessage, transactionContext, exception);

            // Verity if the message is a command
            Type messageType = Type.GetType(transportMessage.GetMessageType(), true);

            if (typeof(ICommand).IsAssignableFrom(messageType))
            {
                var bus = _serviceProvider.GetRequiredService <IBus>();

                // Deserialize the message to get original command
                Message message = await _serializer.Deserialize(transportMessage);

                if (message.Body is ICommand command)
                {
                    // Realign message id
                    command.MessageId = message.GetMessageId();
                    await bus.PublishCommandErrorEvent(messageType, command, exception);
                }
            }
        }