protected function runServiceProvisioner(ServiceDefinitionInterface $service_definition, array $settings)
 {
     $provisioner_config = $service_definition->getProvisioner();
     if (!$provisioner_config) {
         throw new RuntimeError('Missing provisioner meta-data (at least "class" plus optional a "method" and some "settings").');
     }
     if (!class_exists($provisioner_config['class'])) {
         throw new RuntimeError('Unable to load provisioner class: ' . $provisioner_config['class']);
     }
     $provisioner = $this->di_container->make($provisioner_config['class']);
     $provisioner_method = $provisioner_config['method'];
     $provisioner_callable = [$provisioner, $provisioner_method];
     if (isset($provisioner_config['settings']) && is_array($provisioner_config['settings'])) {
         $settings = array_merge($provisioner_config['settings'], $settings);
     }
     $provisioner_settings = new Settings($settings);
     if (!empty($provisioner_method) && is_callable($provisioner_callable)) {
         $provisioner->{$provisioner_method}($service_definition, $provisioner_settings);
     } elseif ($provisioner instanceof ProvisionerInterface) {
         $provisioner->build($service_definition, $provisioner_settings);
     } else {
         throw new RuntimeError(sprintf("Provisioner needs <method> configuration or must implement %s", ProvisionerInterface::CLASS));
     }
 }