/**
* Adds new service definition.
* @param string
* @return ServiceDefinition
*/
public function addDefinition($name, ServiceDefinition $definition = NULL)
{
$this->classListNeedsRefresh = TRUE;
if (!is_string($name) || !$name) {
// builder is not ready for falsy names such as '0'
throw new Nette\InvalidArgumentException(sprintf('Service name must be a non-empty string, %s given.', gettype($name)));
}
$name = isset($this->aliases[$name]) ? $this->aliases[$name] : $name;
if (isset($this->definitions[$name])) {
throw new Nette\InvalidStateException("Service '{$name}' has already been added.");
}
if (!$definition) {
$definition = new ServiceDefinition();
}
$definition->setNotifier(function () {
$this->classListNeedsRefresh = TRUE;
});
return $this->definitions[$name] = $definition;
}