/** * Retrieve bound value for injection * * @param var $inject The annotation * @param lang.reflect.Routine $routine * @param lang.reflect.Parameter $param * @return var * @throws inject.ProvisionException */ private function param($inject, $routine, $param) { $binding = $this->get(isset($inject['type']) ? $inject['type'] : ($param->getTypeRestriction() ?: $param->getType()), isset($inject['name']) ? $inject['name'] : null); if (null === $binding) { if ($param->isOptional()) { return $param->getDefaultValue(); } else { throw new ProvisionException(sprintf('Unknown injection type %s%s for %s\'s %s() parameter %s', isset($inject['type']) ? $inject['type'] : $param->getTypeName(), isset($inject['name']) ? ' named "' . $inject['name'] . '"' : '', $routine->getDeclaringClass()->getName(), $routine->getName(), $param->getName())); } } return $binding; }