public async Task GetHandlerInfo_FindInnerClassHandlerInfo(
            string message,
            [Frozen] IMessageTypeTopicMap messageTypeTopicMap,
            MessageHandlerInfoProvider sut)
        {
            var messageType = typeof(string);

            messageTypeTopicMap.GetMessageTypes().Returns(new[] { messageType });

            var actual = sut.GetHandlerInfo();

            var handlerInfo = Assert.Single(actual);

            Assert.Equal(messageType, handlerInfo.messageType);
            Assert.Equal(typeof(IMessageHandler <string>), handlerInfo.handlerType);

            bool callbackFired = false;
            var  handler       = new TestStringHandler(m =>
            {
                callbackFired = true;
                Assert.Equal(message, m);
            });
            await handlerInfo.handleMethod(handler, message, None);

            Assert.True(callbackFired);
        }
 GetHandlerInfo()
 {
     // Creates a a tuple with the type of handler and message with a delegate to invoke the Handle.
     return(from messageType in _typeTopicMap.GetMessageTypes()
            let handlerType = typeof(IMessageHandler <>).MakeGenericType(messageType)
                              let handleMethod = handlerType.GetTypeInfo().GetMethod(nameof(IMessageHandler <object> .Handle))
                                                 let handlerInstance = Expression.Parameter(typeof(object))
                                                                       let messageInstance = Expression.Parameter(typeof(object))
                                                                                             let tokenInstance = Expression.Parameter(typeof(CancellationToken))
                                                                                                                 let handleFunc = Expression.Lambda <Func <object, object, CancellationToken, Task> >(
                Expression.Call(
                    Expression.Convert(
                        handlerInstance,
                        handlerType),
                    handleMethod,
                    Expression.Convert(
                        messageInstance,
                        messageType),
                    tokenInstance),
                handlerInstance,
                messageInstance,
                tokenInstance)
                                                                                                                                  .Compile()
                                                                                                                                  select(messageType, handlerType, handleFunc));
 }