Exemplo n.º 1
0
 /**
  * Assemble entities
  *
  * @return void
  */
 private function _assembleEntities()
 {
     $this->_im->addAlias('Chat', 'App\\Bot\\Model\\Chat');
     $this->_im->addAlias('LastUpdate', 'App\\Bot\\Model\\LastUpdate');
     $this->_im->addAlias('UserIssue', 'App\\Redmine\\Model\\UserIssue');
     $this->_im->addAlias('UserKey', 'App\\Redmine\\Model\\UserKey');
     $this->_im->setParameters('Chat', ['collection' => $this->_di->newInstance('App\\Model\\Entity\\Collection')]);
     $this->_im->setParameters('LastUpdate', ['collection' => $this->_di->newInstance('App\\Model\\Entity\\Collection')]);
     $this->_im->setParameters('UserKey', ['collection' => $this->_di->newInstance('App\\Model\\Entity\\Collection')]);
 }
 /**
  * {@inheritDoc}
  */
 public function newInstance($name, array $params = array(), $isShared = true)
 {
     if (empty($params) && isset($this->compiledInstantiators[$name])) {
         $cb = $this->compiledInstantiators[$name];
         return $cb($this, $isShared);
     }
     return parent::newInstance($name, $params, $isShared);
 }
Exemplo n.º 3
0
 /**
  * Initialize and register the class via Dependency Injection
  *
  * @param string $alias
  * @param string $class
  * @param array  $parameters
  */
 public function newInstance($alias, $class, array $parameters = [])
 {
     try {
         $this->checkExists($alias);
         if (!empty($parameters)) {
             static::$di->instanceManager()->setParameters($class, $parameters);
         }
         $this->services[$alias] = static::$di->newInstance($class);
     } catch (\InvalidArgumentException $e) {
         throw $e;
     }
 }
Exemplo n.º 4
0
 /**
  * @param Di $locator
  * @return mixed
  */
 public function doProxy(Di $locator)
 {
     $options = $this->getOptions();
     $result = null;
     if ('get' === $options['method']) {
         $result = $locator->get($options['name'], $options['params']);
     } elseif ('newInstance' === $options['method']) {
         $result = $locator->newInstance($options['name'], $options['params'], $options['isShared']);
     } else {
         throw new InvalidArgumentException("'{$options['method']}' is undefined method'");
     }
     return $result;
 }
 /**
  * {@inheritDoc}
  * @return GeneratorInstance
  */
 public function newInstance($name, array $params = array(), $isShared = true)
 {
     $instance = parent::newInstance($name, $params, $isShared);
     if ($instance instanceof GeneratorInstance) {
         /* @var $instance GeneratorInstance */
         $instance->setShared($isShared);
         // When a callback is used, we don't know instance the class name.
         // That's why we assume $name as the instance alias
         if (null === $instance->getName()) {
             $instance->setAlias($name);
         }
     }
     return $instance;
 }
Exemplo n.º 6
0
 /**
  * @group ZF2-142
  */
 public function testDiWillInjectDefaultParameters()
 {
     $di = new Di();
     $classDef = new Definition\ClassDefinition('ZendTest\\Di\\TestAsset\\ConstructorInjection\\OptionalParameters');
     $classDef->addMethod('__construct', true);
     $classDef->addMethodParameter('__construct', 'a', array('type' => false, 'required' => false, 'default' => null));
     $classDef->addMethodParameter('__construct', 'b', array('type' => false, 'required' => false, 'default' => 'defaultConstruct'));
     $classDef->addMethodParameter('__construct', 'c', array('type' => false, 'required' => false, 'default' => array()));
     $di->definitions()->addDefinition($classDef, false);
     $optionalParams = $di->newInstance('ZendTest\\Di\\TestAsset\\ConstructorInjection\\OptionalParameters');
     $this->assertSame(null, $optionalParams->a);
     $this->assertSame('defaultConstruct', $optionalParams->b);
     $this->assertSame(array(), $optionalParams->c);
 }
Exemplo n.º 7
0
 public function testInjectionCanHandleMultipleInjectionsWithMultipleArguments()
 {
     $definitionList = new DefinitionList(array($classdef = new Definition\ClassDefinition('ZendTest\\Di\\TestAsset\\InjectionClasses\\A'), new Definition\RuntimeDefinition()));
     $classdef->addMethod('injectSplitDependency');
     $classdef->addMethodParameter('injectSplitDependency', 'b', array('required' => true, 'type' => 'ZendTest\\Di\\TestAsset\\InjectionClasses\\B'));
     $classdef->addMethodParameter('injectSplitDependency', 'somestring', array('required' => true, 'type' => null));
     /**
      * First test that this works with a single call
      */
     $di = new Di($definitionList);
     $di->instanceManager()->setInjections('ZendTest\\Di\\TestAsset\\InjectionClasses\\A', array('injectSplitDependency' => array('b' => 'ZendTest\\Di\\TestAsset\\InjectionClasses\\B', 'somestring' => 'bs-id')));
     $a = $di->newInstance('ZendTest\\Di\\TestAsset\\InjectionClasses\\A');
     $this->assertInstanceOf('ZendTest\\Di\\TestAsset\\InjectionClasses\\B', $a->bs[0]);
     $this->assertEquals('bs-id', $a->bs[0]->id);
     /**
      * Next test that this works with multiple calls
      */
     $di = new Di($definitionList);
     $di->instanceManager()->setInjections('ZendTest\\Di\\TestAsset\\InjectionClasses\\A', array('injectSplitDependency' => array(array('b' => 'ZendTest\\Di\\TestAsset\\InjectionClasses\\B', 'somestring' => 'bs-id'), array('b' => 'ZendTest\\Di\\TestAsset\\InjectionClasses\\C', 'somestring' => 'bs-id-for-c'))));
     $a = $di->newInstance('ZendTest\\Di\\TestAsset\\InjectionClasses\\A');
     $this->assertInstanceOf('ZendTest\\Di\\TestAsset\\InjectionClasses\\B', $a->bs[0]);
     $this->assertEquals('bs-id', $a->bs[0]->id);
     $this->assertInstanceOf('ZendTest\\Di\\TestAsset\\InjectionClasses\\C', $a->bs[1]);
     $this->assertEquals('bs-id-for-c', $a->bs[1]->id);
 }
Exemplo n.º 8
0
 /**
  * Create new object instance
  *
  * @param string $className
  * @param array $arguments
  * @param bool $isShared
  * @return object
  */
 public function create($className, array $arguments = array(), $isShared = true)
 {
     $object = $this->_di->newInstance($className, $arguments, $isShared);
     return $object;
 }
Exemplo n.º 9
0
    /**
     * Test for Circular Dependencies (case 2)
     * 
     * C->D, D->E, E->C
     * @group CircularDependencyCheck
     */
    public function testNewInstanceThrowsExceptionWhenEnteringInMiddleOfCircularDependency()
    {
        $di = new Di();

        $this->setExpectedException(
            'Zend\Di\Exception\CircularDependencyException',
            'Circular dependency detected: ZendTest\Di\TestAsset\CircularClasses\C depends on ZendTest\Di\TestAsset\CircularClasses\D and viceversa'
        );
        $di->newInstance('ZendTest\Di\TestAsset\CircularClasses\D');
    }