load('services.yml'); $this->configureCommandBuses($mergedConfig, $container); $this->injectMethodNameInflector($mergedConfig, $container); } public function getAlias() { return 'tactician'; } /** * @param array $mergedConfig * @param ContainerBuilder $container */ private function configureCommandBuses(array $mergedConfig, ContainerBuilder $container) { foreach ($mergedConfig['commandbus'] as $commandBusName => $commandBusConfig) { $middlewares = array_map( function ($middlewareServiceId) { return new Reference($middlewareServiceId); }, $commandBusConfig['middleware'] ); $serviceName = 'tactician.commandbus.' . $commandBusName; $definition = new Definition($container->getParameter('tactician.commandbus.class'), [$middlewares]); $container->setDefinition($serviceName, $definition); if ($commandBusName === $mergedConfig['default_bus']) { $container->setAlias('tactician.commandbus', $serviceName); } } } /** * Define the default Method Name Inflector. * This will fail silently if the command_handler service does not exist * * @param array $mergedConfig * @param ContainerBuilder $container */ private function injectMethodNameInflector(array $mergedConfig, ContainerBuilder $container) { if (! $container->has('tactician.middleware.command_handler')) { return; } $inflectorReference = new Reference($mergedConfig['method_inflector']); $handlerLocator = $container->findDefinition('tactician.middleware.command_handler'); $handlerLocator->replaceArgument(2, $inflectorReference); } }