public static object ExecuteQuery(object queryInstance)
        {
            // найти обработчик для данного запроса
            var queryHandlerType = LoadAllAssemblies().SelectMany(s => s.GetTypes())
                                   .FirstOrDefault(i => i.Name == queryInstance.GetType().Name + "Handler");

            if (queryHandlerType == null)
            {
                throw new ArgumentException("Не найден обработчик " + queryInstance.GetType().Name + "Handler");
            }

            // создаем экземпляр обработчика через контейнер, т.к. в конструкторе могут быть зависимости
            var queryHandlerInstance = ContainerConfigurator.Get().Resolve(queryHandlerType);

            // выполнить запрос и вернуть данные
            var method = queryHandlerType.GetMethod("Handle");
            var result = method.Invoke(queryHandlerInstance, new[] { queryInstance });

            return(result);
        }
        public static void ExcecuteCommand(object commandInstance)
        {
            // найти обработчик для данной команды
            var commandHandlerType =
                LoadAllAssemblies()
                .SelectMany(s => s.GetTypes())
                .FirstOrDefault(i => i.Name == commandInstance.GetType().Name + "Handler");

            if (commandHandlerType == null)
            {
                throw new ArgumentException("Не найден обработчик " + commandInstance.GetType().Name + "Handler");
            }

            // создаем экземпляр обработчика через контейнер, т.к. в конструкторе могут быть зависимости
            var commandHandlerInstance = ContainerConfigurator.Get().Resolve(commandHandlerType);

            // выполнить команду
            var method = commandHandlerType.GetMethod("Handle");

            method.Invoke(commandHandlerInstance, new[] { commandInstance });
        }