public void SecondServiceLocatorResolves()
        {
            var bus = new Bus();

            #region composition root

            var catalog = new AggregateCatalog();
            catalog.Catalogs.Add(new AssemblyCatalog(typeof(Message2Consumer).GetTypeInfo().Assembly));
            var compositionContainer = new CompositionContainer(catalog);
            var message2Consumer     = new Message2Consumer();
            ServiceLocator.SetLocatorProvider(() => new MefServiceLocator(compositionContainer));

            #endregion

            bus.SetServiceLocator(new MefServiceLocator(compositionContainer));
            compositionContainer.ComposeExportedValue(message2Consumer);
#if SUPPORT_ASYNC_CONSUMER
            var message3AsyncConsumer = new Message3AsyncConsumer();
            compositionContainer.ComposeExportedValue(message3AsyncConsumer);
#endif
            compositionContainer.ComposeExportedValue(new Pipe());
            compositionContainer.ComposeExportedValue(new Pipe23());
            bus.SetServiceLocator(new MefServiceLocator(compositionContainer));

            var directory = Path.GetDirectoryName(new Uri(GetType().GetTypeInfo().Assembly.CodeBase).LocalPath);
            bus.AddHandlersAndTranslators(directory, "Tests*.dll", "Tests.Mocks");

            bus.Handle(new Message2());

            Assert.Equal(1, message2Consumer.MessageReceivedCount);
        }
        public async Task ManuallyComposedAsyncTypeAsynchronouslyHandlesMessageProperly()
        {
            var message3 = new Message3 {
                CorrelationId = "1234"
            };

            var bus = new Bus();

            var message3AsyncConsumer = new Message3AsyncConsumer();

            bus.AddHandler(message3AsyncConsumer);

            await bus.HandleAsync(message3);

            Assert.IsNotNull(Message3AsyncConsumer.LastMessageReceived);
            Assert.AreEqual(message3.CorrelationId, Message3AsyncConsumer.LastMessageReceived.CorrelationId);
        }
        public async Task ManuallyComposedSyncAsyncTypeAsynchronouslyHandlesMessageProperly()
        {
            var message2 = new Message2 {
                CorrelationId = "1234"
            };

            var bus = new Bus();

            var message3AsyncConsumer = new Message3AsyncConsumer();

            bus.AddHandler(message3AsyncConsumer);

            var pipe = new Pipe23();

            bus.AddTranslator(pipe);

            await bus.HandleAsync(message2);

            Assert.AreSame(message2, Pipe23.LastMessageProcessed);
            Assert.IsNotNull(Message3AsyncConsumer.LastMessageReceived);
            Assert.AreEqual(message2.CorrelationId, Message3AsyncConsumer.LastMessageReceived.CorrelationId);
        }