public void DisposeIsCalledOnModel()
        {
            // Arrange
            var connectionMock = new Mock <IConnection>();
            var contextMock    = new Mock <IBusContext <IConnection> >();
            var modelMock      = new Mock <IModel>();

            contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object);
            connectionMock.Setup(e => e.CreateModel()).Returns(modelMock.Object);

            var receiver = new RabbitMqMessageReceiver(contextMock.Object, "test.queue", new string[0]);

            // Act
            receiver.Dispose();

            // Assert
            modelMock.Verify(e => e.Dispose());
        }
        static void Main(string[] args)
        {
            IMessageSender ms = new RabbitMqMessageSender("TestQ");

            Console.WriteLine("Connected to TestQ...");

            var o = new Wibbler("Hello Matey");

            ms.PublishObjectAsMessage(o);

            RabbitMqMessageReceiver mr = new RabbitMqMessageReceiver("TestQ");

            mr.Consumer.Received += (sender, e) =>
            {
                var     body    = e.Body;
                var     message = Encoding.UTF8.GetString(body);
                Wibbler w       = JsonConvert.DeserializeObject <Wibbler>(message);
                Console.SetCursorPosition(0, Console.CursorTop - 2);
                Console.WriteLine($" [x] Received {w.Id} on {mr.QueueName}, containing the comment {w.Comment}");
                Console.WriteLine("                                                                           ");
                Console.WriteLine("Press [enter] to exit...");
            };

            mr.ConsumeMessage();
            Console.WriteLine("Press [enter] to exit...");

            var t = new System.Timers.Timer(5000);

            t.Elapsed += (sender, e) =>
            {
                ms.PublishObjectAsMessage(o);
            };

            t.Start();

            Console.ReadLine();

            ms.Dispose();
            mr.Dispose();
        }