private function getDefinitionResolver(Definition $definition)
{
switch (true) {
case $definition instanceof \DI\Definition\SelfResolvingDefinition:
if (!$this->selfResolvingResolver) {
$this->selfResolvingResolver = new SelfResolver($this->container);
}
return $this->selfResolvingResolver;
case $definition instanceof \DI\Definition\ObjectDefinition:
if (!$this->objectResolver) {
$this->objectResolver = new ObjectCreator($this, $this->proxyFactory);
}
return $this->objectResolver;
case $definition instanceof \DI\Definition\DecoratorDefinition:
if (!$this->decoratorResolver) {
$this->decoratorResolver = new DecoratorResolver($this->container, $this);
}
return $this->decoratorResolver;
case $definition instanceof \DI\Definition\FactoryDefinition:
if (!$this->factoryResolver) {
$this->factoryResolver = new FactoryResolver($this->container, $this);
}
return $this->factoryResolver;
case $definition instanceof \DI\Definition\ArrayDefinition:
if (!$this->arrayResolver) {
$this->arrayResolver = new ArrayResolver($this);
}
return $this->arrayResolver;
case $definition instanceof \DI\Definition\EnvironmentVariableDefinition:
if (!$this->envVariableResolver) {
$this->envVariableResolver = new EnvironmentVariableResolver($this);
}
return $this->envVariableResolver;
case $definition instanceof \DI\Definition\InstanceDefinition:
if (!$this->instanceResolver) {
$this->instanceResolver = new InstanceInjector($this, $this->proxyFactory);
}
return $this->instanceResolver;
default:
throw new \RuntimeException('No definition resolver was configured for definition of type ' . get_class($definition));
}
}