/**
  * 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'));
 }