public async Task WithVoidResultTest()
        {
            var services        = new ServiceCollection();
            var serviceProvider = services.BuildServiceProvider();
            var messageHandler  = new MessageHandler();

            var method     = typeof(MessageHandler).GetMethod("Handle", new[] { typeof(MessageY) });
            var descriptor = new MessageHandlerActionDescriptor(typeof(MessageX), method);

            var invoker = new MessageHandlerInvoker <MessageY>(messageHandler, descriptor, ImmutableArray <IContextualProvider <IMessageProcessor> > .Empty, serviceProvider);

            var dispatchResult = await invoker.HandleAsync(new MessageY { I = 34 }, new DispatchValueDictionary());

            Assert.IsTrue(dispatchResult.IsSuccess);

            dispatchResult = await invoker.HandleAsync(new MessageY { I = 34, Fail = true }, new DispatchValueDictionary());

            Assert.IsFalse(dispatchResult.IsSuccess);
        }
        public async Task WithDispatchResultTaskTest()
        {
            var services        = new ServiceCollection();
            var serviceProvider = services.BuildServiceProvider();
            var messageHandler  = new MessageHandler();

            var method     = typeof(MessageHandler).GetMethod("HandleAsync", new[] { typeof(MessageX) });
            var descriptor = new MessageHandlerActionDescriptor(typeof(MessageX), method);

            var invoker = new MessageHandlerInvoker <MessageX>(messageHandler, descriptor, ImmutableArray <IContextualProvider <IMessageProcessor> > .Empty, serviceProvider);

            var dispatchResult = await invoker.HandleAsync(new MessageX(), new DispatchValueDictionary());

            Assert.IsTrue(dispatchResult.IsSuccess);
            Assert.IsInstanceOfType(dispatchResult, typeof(SuccessDispatchResult <int>));
            Assert.AreEqual(42, ((SuccessDispatchResult <int>)dispatchResult).Result);
        }