Example #1
0
 /**
  * {@inheritdoc}
  */
 public function buildDiscovery()
 {
     $this->assertModulesLoaded();
     $this->emitWarningForDuplicateTypes();
     $this->emitWarningForInvalidBindings();
     if ($this->discovery->hasBindings() || $this->discovery->hasBindingTypes()) {
         throw new DiscoveryNotEmptyException('The discovery is not empty.');
     }
     $tx = new Transaction();
     try {
         foreach ($this->typeDescriptors->toArray() as $typeName => $descriptorsByModule) {
             foreach ($descriptorsByModule as $typeDescriptor) {
                 if ($typeDescriptor->isEnabled()) {
                     $tx->execute($this->addBindingType($typeDescriptor));
                 }
             }
         }
         foreach ($this->bindingDescriptors->toArray() as $bindingDescriptor) {
             if ($bindingDescriptor->isEnabled()) {
                 $tx->execute($this->addBinding($bindingDescriptor));
             }
         }
         $tx->commit();
     } catch (Exception $e) {
         $tx->rollback();
         throw $e;
     }
 }