/** * Load extension. * * @param array $configs * @param ContainerBuilder $container */ public function load(array $configs, ContainerBuilder $container) { if ($container->has('request')) { new RequestFacade($container->get('request')); } /** @var KernelInterface $kernel */ $kernel = $container->get('kernel'); $routes = $this->buildRouteCollection($configs['router']['routes']); $container->register('route_collection', $routes, true); $kernel->addListenerOnce(KernelEvents::REQUEST, array(new RouterListener($routes, $configs['router']['prefix']), 'onRequest')); Log::$APP_LOG = $configs['log']['name']; $container->register('log', $this->buildLog($configs['log']), true); $container->setDefinition('template', new Definition('Borobudur\\Bundle\\FrameworkBundle\\Template\\TemplateCompiler'))->addArgument(new Reference('container'))->addArgument($configs['template']['app_path'])->share(); $container->setDefinition('acl', new Definition('Borobudur\\Acl\\Acl'))->addArgument(isset($configs['acl']) && isset($configs['acl']['policies']) ? $configs['acl']['policies'] : null)->share(); }
/** * Load service from array. * * @param array $services */ public function load(array $services) { foreach ($services as $id => $service) { if ('services' === $id) { $this->load($service); continue; } if (is_int($id) || !$this->isArrayService($service)) { continue; } $this->container->setDefinition($id, $this->buildDefinitionFromArray($id, $service)); // Build service immediately when eager is true. if (isset($service['eager']) && true === $service['eager']) { $this->container->get($id); } } }
/** * Build storage. * * @param ContainerBuilder $container * @param array $configs */ private function buildStorage(ContainerBuilder $container, array $configs) { $readModelStorage = $this->buildReadModelStorage($configs['read_model']['storage']); $readModelDefinition = new AbstractDefinition(get_class($readModelStorage), 'Borobudur\\Cqrs\\ReadModel\\Storage\\StorageInterface'); $container->register('cqrs.read_model_storage', $readModelStorage); $container->setDefinition('cqrs.read_model_storage', $readModelDefinition); if (true === $configs['snapshot']['enable']) { $snapshot = $this->buildSnapshot($configs['snapshot']['storage']); $snapshotDefinition = new AbstractDefinition(get_class($snapshot), 'Borobudur\\EventSourcing\\Snapshot\\SnapshotInterface'); $container->register('cqrs.snapshot', $snapshot); $container->setDefinition('cqrs.snapshot', $snapshotDefinition); $container->get('cqrs.snapshot')->setSnapshotPeriodical($configs['snapshot']['periodically']); } $eventStore = $this->buildEventStore($configs['event_store']['storage']); $eventStoreDefinition = new AbstractDefinition(get_class($eventStore), 'Borobudur\\EventSourcing\\Storage\\StorageInterface'); $container->register('cqrs.event_store', $eventStore); $container->setDefinition('cqrs.event_store', $eventStoreDefinition); if (true === $configs['snapshot']['enable']) { $container->get('cqrs.event_store')->attachSnapshot($container->get('cqrs.snapshot')); } $container->register('cqrs.uow_transaction', new UnitOfWorkTransaction(array($container->get('cqrs.read_model_storage'), $container->get('cqrs.event_store')))); }
public function testClassAlias() { $container = new ContainerBuilder(); $container->setDefinition('counter', new Definition('\\Borobudur\\DependencyInjection\\Test\\HitCounter'))->share(); $instance = $container->getDi()->create(new CounterDecorator()); $this->assertSame(1, $instance->callMethod('count')); $this->assertSame(2, $instance->callMethod('count')); $this->assertSame(3, $instance->callMethod('count')); }