public function testAbstract()
 {
     $container = new ContainerBuilder();
     $container->setDefinition('iqbal', new Definition\AbstractDefinition('\\Borobudur\\DependencyInjection\\Test\\Iqbal', '\\Borobudur\\DependencyInjection\\Test\\WarriorInterface'));
     $container->setDefinition('battle', new Definition('\\Borobudur\\DependencyInjection\\Test\\Battle'));
     $battle = $container->get('battle');
     $this->assertEquals('iqbal', $battle->warrior->getName());
     $this->assertEquals('fighter', $battle->warrior->getType());
     $container->setDefinition('tanaka', new Definition\AbstractDefinition('\\Borobudur\\DependencyInjection\\Test\\Tanaka', '\\Borobudur\\DependencyInjection\\Test\\WarriorInterface'));
     $this->assertTrue($container->has('iqbal'));
     $battle = $container->get('battle', array('x' => 'a'));
     $this->assertEquals('tanaka', $battle->warrior->getName());
     $this->assertEquals('archer', $battle->warrior->getType());
     $this->assertEquals('a', $battle->x);
     $battle = $container->get('battle', array(new Reference('iqbal')));
     $this->assertEquals('iqbal', $battle->warrior->getName());
     $this->assertEquals('fighter', $battle->warrior->getType());
     $battle = $container->get('battle', array(new Reference('tanaka'), 'a'));
     $this->assertEquals('tanaka', $battle->warrior->getName());
     $this->assertEquals('archer', $battle->warrior->getType());
     $this->assertEquals('a', $battle->x);
     $this->assertTrue($container->has('\\Borobudur\\DependencyInjection\\Test\\WarriorInterface'));
     $container->set('tanaka', function () {
     });
     $this->assertTrue($container->has('\\Borobudur\\DependencyInjection\\Test\\WarriorInterface'));
     $this->assertFalse($container->hasAlias('tanaka'));
 }
 /**
  * Build response from service.
  *
  * @param string $serviceId
  *
  * @return mixed
  */
 private function getServiceController($serviceId)
 {
     if (!$this->container->has($serviceId)) {
         throw new RuntimeException(sprintf('Service "%s" is undefined.', $serviceId));
     }
     return $this->container->getDi()->create($this->container->get($serviceId));
 }
 /**
  * Constructor.
  *
  * @param ContainerBuilder $container
  */
 public function __construct(ContainerBuilder $container)
 {
     $this->container = $container;
     if ($container->has('request')) {
         $this->request = $container->get('request');
     }
 }
 /**
  * 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();
 }