static function parseServices(Nette\DI\ContainerBuilder $container, array $config) { $all = isset($config['services']) ? $config['services'] : array(); $all += isset($config['factories']) ? $config['factories'] : array(); uasort($all, function ($a, $b) { return strcmp(Config::isInheriting($a), Config::isInheriting($b)); }); foreach ($all as $name => $def) { if ($parent = Config::takeParent($def)) { $container->removeDefinition($name); $definition = $container->addDefinition($name); if ($parent !== Config::OVERWRITE) { foreach ($container->getDefinition($parent) as $k => $v) { $definition->{$k} = $v; } } } elseif ($container->hasDefinition($name)) { $definition = $container->getDefinition($name); } else { $definition = $container->addDefinition($name); } try { static::parseService($definition, $def, isset($config['services'][$name])); } catch (\Exception $e) { throw new Nette\DI\ServiceCreationException("Service '{$name}': " . $e->getMessage(), NULL, $e); } } }