public function execute(Request $request)
 {
     $key = $request->getKey();
     $definitionsMap = $request->getDefinitionsMap();
     $definition = $definitionsMap[$key];
     return $definition->getConcrete();
 }
 public function execute(Request $request)
 {
     $key = $request->getKey();
     $definitionsMap = $request->getDefinitionsMap();
     $definition = $definitionsMap[$key];
     $value = $definition->getConcrete();
     return $request->getContainer()->get($value);
 }
 public function build(Request $request)
 {
     $key = $request->getKey();
     $definitionsMap = $request->getDefinitionsMap();
     $definition = $definitionsMap->get($key);
     $builder = $this->getBuilder($definition->getType());
     return $builder->execute($request);
 }
 public function execute(Request $request)
 {
     $key = $request->getKey();
     foreach ($request->getProviders() as $provider) {
         if ($provider->has($key)) {
             return $provider->get($key);
         }
     }
 }
 protected function handle(Request $request)
 {
     $key = $request->getKey();
     $providers = $request->getProviders();
     foreach ($providers as $provider) {
         if ($provider->has($key)) {
             return true;
         }
     }
     return false;
 }
 /**
  * Build the requested service.
  * 
  * @param   Request     $request
  * @return  mixed
  */
 public function build(Request $request)
 {
     $key = (string) $request->getKey();
     // circular dependency guard
     if (array_key_exists($key, $this->buildingKeys)) {
         throw new ContainerException("Circular Dependency detected for {$key}");
     }
     $this->buildingKeys[$key] = true;
     // check local
     if ($this->localHas($request)) {
         $factory = new LocalFactory();
         $returnValue = $factory->build($request);
         unset($this->buildingKeys[$key]);
         return $returnValue;
     }
     // check in nested providers
     if ($this->providersHas($request)) {
         $factory = new ProviderFactory();
         $returnValue = $factory->build($request);
         unset($this->buildingKeys[$key]);
         return $returnValue;
     }
     // try to bail-out client call with reflection.
     // if we're able to resolve all dependencies, we'll assemble a new
     // definition with the returned value for future use.
     $factory = new LocalFactory();
     // temporary definition
     $def = new Definition((string) $key, null, new DefinitionType(DefinitionType::REFLECTION));
     $request->getDefinitionsMap()->add($def);
     $returnValue = $factory->build($request);
     unset($this->buildingKeys[$key]);
     $request->getContainer()->singleton($key, $returnValue);
     return $returnValue;
 }
 public function execute(Request $request)
 {
     $key = $request->getKey();
     $reflected = new \ReflectionClass($key);
     // abstract class or interface
     if (!$reflected->isInstantiable()) {
         $message = "Unable to resolve [{$reflected->name}]";
         $this->raiseException($message);
     }
     $constructor = $reflected->getConstructor();
     $parameters = array();
     if (!is_null($constructor)) {
         $parameters = $this->getDependencies($constructor, $request->getContainer());
     }
     return !empty($parameters) ? $reflected->newInstanceArgs($parameters) : $reflected->newInstanceArgs();
 }
 protected function handle(Request $request)
 {
     $key = $request->getKey();
     $definitions = $request->getDefinitionsMap();
     return $definitions->has($key);
 }