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 }); }