/** * Loads the binding descriptor. * * @param Module $containingModule The module that * contains the * descriptor. * @param BindingTypeDescriptor|null $typeDescriptor The type descriptor. * * @throws AlreadyLoadedException If the descriptor is already loaded. */ public function load(Module $containingModule, BindingTypeDescriptor $typeDescriptor = null) { if (null !== $this->state) { throw new AlreadyLoadedException('The binding descriptor is already loaded.'); } $this->loadErrors = array(); if ($typeDescriptor && $typeDescriptor->isLoaded() && $typeDescriptor->isEnabled()) { try { $this->binding->initialize($typeDescriptor->getType()); } catch (Exception $e) { $this->loadErrors[] = $e; } } $this->containingModule = $containingModule; $this->typeDescriptor = $typeDescriptor; $this->refreshState(); }
/** * Initializes a binding. * * @param Binding $binding The binding to initialize. * * @throws BindingNotAcceptedException If the loaded type does not accept * the binding. */ protected function initializeBinding(Binding $binding) { $binding->initialize($this->getBindingType($binding->getTypeName())); $bindingClass = get_class($binding); if (!isset($this->initializersByBindingClass[$bindingClass])) { $this->initializersByBindingClass[$bindingClass] = array(); // Find out which initializers accept the binding foreach ($this->initializers as $initializer) { if ($initializer->acceptsBinding($bindingClass)) { $this->initializersByBindingClass[$bindingClass][] = $initializer; } } } // Apply all initializers that we found foreach ($this->initializersByBindingClass[$bindingClass] as $initializer) { $initializer->initializeBinding($binding); } }