public async Task Should_have_a_familiar_syntax()
        {
            MessageCorrelation.UseCorrelationId<LegacyMessage>(x => x.TransactionId);

            var harness = new InMemoryTestHarness();
            harness.OnConfigureInMemoryBus += configurator =>
            {
                configurator.Send<IEvent>(x =>
                {
                    x.UseCorrelationId(p => p.TransactionId);
                });
            };

            Task<ConsumeContext<INewUserEvent>> handled = null;
            Task<ConsumeContext<OtherMessage>> otherHandled = null;
            Task<ConsumeContext<LegacyMessage>> legacyHandled = null;
            harness.OnConfigureInMemoryReceiveEndpoint += configurator =>
            {
                handled = harness.Handled<INewUserEvent>(configurator);
                otherHandled = harness.Handled<OtherMessage>(configurator);
                legacyHandled = harness.Handled<LegacyMessage>(configurator);
            };


            await harness.Start();
            try
            {
                var transactionId = NewId.NextGuid();

                await harness.InputQueueSendEndpoint.Send<INewUserEvent>(new {TransactionId = transactionId});

                ConsumeContext<INewUserEvent> context = await handled;

                Assert.IsTrue(context.CorrelationId.HasValue);
                Assert.That(context.CorrelationId.Value, Is.EqualTo(transactionId));

                await harness.InputQueueSendEndpoint.Send<OtherMessage>(new {CorrelationId = transactionId});

                ConsumeContext<OtherMessage> otherContext = await otherHandled;

                Assert.IsTrue(otherContext.CorrelationId.HasValue);
                Assert.That(otherContext.CorrelationId.Value, Is.EqualTo(transactionId));

                await harness.InputQueueSendEndpoint.Send<LegacyMessage>(new {TransactionId = transactionId});

                ConsumeContext<LegacyMessage> legacyContext = await legacyHandled;

                Assert.IsTrue(legacyContext.CorrelationId.HasValue);
                Assert.That(legacyContext.CorrelationId.Value, Is.EqualTo(transactionId));
            }
            finally
            {
                await harness.Stop();
            }
        }
        private Task <ConsumeContext <T> > ConnectPublishHandler <T>(InMemoryTestHarness harness) where T : class
        {
            Task <ConsumeContext <T> > result = null;

            harness.Bus.ConnectReceiveEndpoint(NewId.NextGuid().ToString(), context =>
            {
                result = harness.Handled <T>(context);
            });

            return(result);
        }