TODO: Coupling configuration to the registry is convenient but the two are
effectively unrelated and could be decoupled.
$config = $reg->getConfig('foobar');
private function registerRegistries(Container $container) { foreach (['generator' => 'reports', 'renderer' => 'outputs'] as $registryType => $optionName) { $container->register('report.registry.' . $registryType, function (Container $container) use($registryType, $optionName) { $registry = new ConfigurableRegistry($registryType, $container, $container->get('json.decoder')); foreach ($container->getServiceIdsForTag('report_' . $registryType) as $serviceId => $attributes) { $registry->registerService($attributes['name'], $serviceId); } $configs = array_merge(require __DIR__ . '/config/report/' . $registryType . 's.php', $container->getParameter($optionName)); foreach ($configs as $name => $config) { $registry->setConfig($name, $config); } return $registry; }); } $container->register('benchmark.registry.executor', function (Container $container) { $registry = new ConfigurableRegistry('executor', $container, $container->get('json.decoder')); foreach ($container->getServiceIdsForTag('benchmark_executor') as $serviceId => $attributes) { $registry->registerService($attributes['name'], $serviceId); } $executorConfigs = array_merge(require __DIR__ . '/config/benchmark/executors.php', $container->getParameter('executors')); foreach ($executorConfigs as $name => $config) { $registry->setConfig($name, $config); } return $registry; }); }