/** * {@inheritdoc} */ public function buildDiscovery() { $this->assertPackagesLoaded(); $this->emitWarningForDuplicateTypes(); $this->emitWarningForInvalidBindings(); if (count($this->discovery->getBindings()) > 0 || count($this->discovery->getDefinedTypes()) > 0) { throw new DiscoveryNotEmptyException('The discovery is not empty.'); } $tx = new Transaction(); try { foreach ($this->typeDescriptors->toArray() as $typeName => $typesByPackage) { foreach ($typesByPackage as $typeDescriptor) { if ($typeDescriptor->isEnabled()) { $tx->execute($this->defineType($typeDescriptor)); } } } foreach ($this->bindingDescriptors->toArray() as $bindingDescriptor) { if ($bindingDescriptor->isEnabled()) { $tx->execute($this->bind($bindingDescriptor)); } } $tx->commit(); } catch (Exception $e) { $tx->rollback(); throw $e; } }