public CommandExecutionResult Execute(CommandInstance cmd)
        {
            CommandHandlerInstance handler = null;

            if (Factory.Handles(cmd))
            {
                handler = Factory;
            }
            else
            {
                handler = CommandHandlers.Single(c => c.Handles(cmd));
            }

            return(handler.Execute(cmd));
        }
        public async Task <ICommandMessage> Consume(ICommandMessage message)
        {
            // Throw error if more than one CommandHandler exists for the same combination of Request and Responsemodels.
            var handler = CommandHandlers.Single(x =>
                                                 x.ExpectedRequestType == message.ExpectedRequestType &&
                                                 x.ExpectedResponseType == message.ExpectedResponseType);

            var response =
                await handler.ExecuteInternalAsync(message.RequestData.GetRequest(), CancellationToken.None);

            return(new CommandMessage
            {
                ExpectedRequestType = message.ExpectedRequestType,
                ExpectedResponseType = message.ExpectedResponseType,
                RequestData = message.RequestData,
                ResponseData = response.ToBytes()
            });
        }