public void TestThatExchangeSendsTyped()
        {
            var results = new ConcurrentQueue <object>();

            var logger         = ConsoleLogger.TestInstance();
            var queue          = new AsyncMessageQueue(null);
            var exchange       = new TestExchange(queue, logger);
            var accessExchange = exchange.AfterCompleting(2);

            var exchangeReceiver1       = new TestExchangeReceiver1(results, logger);
            var accessExchangeReceiver1 = exchangeReceiver1.AfterCompleting(1);
            var exchangeReceiver2       = new TestExchangeReceiver2(results, logger);
            var accessExchangeReceiver2 = exchangeReceiver2.AfterCompleting(1);

            exchange
            .Register(Covey <LocalType1, ExternalType1, ExchangeMessage> .Of(
                          new TestExchangeSender(queue, logger),
                          exchangeReceiver1,
                          new TestExchangeAdapter1()))
            .Register(Covey <LocalType2, ExternalType2, ExchangeMessage> .Of(
                          new TestExchangeSender(queue, logger),
                          exchangeReceiver2,
                          new TestExchangeAdapter2()));

            var local1 = new LocalType1("ABC", 123);

            exchange.Send(local1);

            var local2 = new LocalType2("DEF", 456);

            exchange.Send(local2);

            Assert.Equal(2, accessExchange.ReadFrom <int>("sentCount"));
            Assert.Equal(local1, accessExchangeReceiver1.ReadFrom <LocalType1>("getMessage"));
            Assert.Equal(local2, accessExchangeReceiver2.ReadFrom <LocalType2>("getMessage"));

            exchange.Close();
        }
 protected bool Equals(LocalType2 other) => Attribute1 == other.Attribute1 && Attribute2 == other.Attribute2;