public void ExecuteCommands(IEnumerable <ICommand> commands) { var arrayCommands = commands.ToArraySafe(); var validationResults = ValidateCommands(arrayCommands).ToArraySafe(); if (validationResults.Any()) { throw new CommandValidationException(validationResults); } foreach (var command in arrayCommands) { var handlers = dispatcher.GetHandlers(command); foreach (var handler in handlers) { var executorInfo = GetExecutorInfo(command, handler); executorInfo.ExecuteHandler(handler, command); } } }