/**
  * Inject a package into available configuration.
  *
  * @param string $package Package name
  * @param array $metadata Package metadata with potential injections.
  * @param Injector\InjectorInterface $injector Injector to use.
  * @return void
  */
 private function injectPackageIntoConfig($package, array $metadata, Injector\InjectorInterface $injector)
 {
     foreach ($this->packageTypes as $type => $key) {
         if (!$injector->registersType($type)) {
             continue;
         }
         if (!$this->metadataKeyIsValid($key, $metadata)) {
             continue;
         }
         $this->io->write(sprintf('<info>Installing %s from package %s</info>', $metadata[$key], $package));
         $injector->inject($metadata[$key], $type, $this->io);
     }
 }
 /**
  * Inject a module into available configuration.
  *
  * @param string $package Package name
  * @param string $module Module to install in configuration
  * @param Injector\InjectorInterface $injector Injector to use.
  * @param Collection $packageTypes
  * @return void
  */
 private function injectModuleIntoConfig($package, $module, Injector\InjectorInterface $injector, Collection $packageTypes)
 {
     // Find the first package type the injector can handle.
     $type = $packageTypes->reduce(function ($discovered, $type) use($injector) {
         if ($discovered) {
             return $discovered;
         }
         $discovered = $injector->registersType($type) ? $type : $discovered;
         return $discovered;
     }, false);
     $this->io->write(sprintf('<info>Installing %s from package %s</info>', $module, $package));
     $injector->inject($module, $type, $this->io);
 }