Exemplo n.º 1
0
 /**
  * @param string $definitionsFile
  * @param Zend\Di\Di $diInstance
  */
 public function __construct($definitionsFile = null, Zend\Di\Di $diInstance = null)
 {
     Magento_Profiler::start('di');
     if (is_file($definitionsFile) && is_readable($definitionsFile)) {
         $definition = new Magento_Di_Definition_ArrayDefinition_Zend(unserialize(file_get_contents($definitionsFile)));
     } else {
         $definition = new Magento_Di_Definition_RuntimeDefinition_Zend();
     }
     $this->_di = $diInstance ? $diInstance : new Magento_Di();
     $this->_di->setDefinitionList(new Magento_Di_DefinitionList_Zend($definition));
     $this->_di->instanceManager()->addSharedInstance($this, 'Magento_ObjectManager');
     Magento_Profiler::stop('di');
 }
Exemplo n.º 2
0
    public function testPassingInvalidDefinitionRaisesException()
    {
        $di = new Di();

        $this->setExpectedException('PHPUnit_Framework_Error');
        $di->setDefinitionList(array('foo'));
    }
Exemplo n.º 3
0
 public function testDiConstructorCanTakeDependencies()
 {
     $dl = new DefinitionList(array());
     $im = new InstanceManager();
     $cg = new Config(array());
     $di = new Di($dl, $im, $cg);
     $this->assertSame($dl, $di->definitions());
     $this->assertSame($im, $di->instanceManager());
     $di->setDefinitionList($dl);
     $di->setInstanceManager($im);
     $this->assertSame($dl, $di->definitions());
     $this->assertSame($im, $di->instanceManager());
 }
Exemplo n.º 4
0
 /**
  * @group SharedInstance
  */
 public function testGetWithParamsWillUseSharedInstance()
 {
     $di = new Di();
     $sharedInstanceClass = 'ZendTest\\Di\\TestAsset\\ConstructorInjection\\A';
     $retrievedInstanceClass = 'ZendTest\\Di\\TestAsset\\ConstructorInjection\\C';
     // Provide definitions for $retrievedInstanceClass, but not for $sharedInstanceClass.
     $arrayDefinition = array($retrievedInstanceClass => array('supertypes' => array(), 'instantiator' => '__construct', 'methods' => array('__construct' => true), 'parameters' => array('__construct' => array("{$retrievedInstanceClass}::__construct:0" => array('a', $sharedInstanceClass, true, NULL), "{$retrievedInstanceClass}::__construct:1" => array('params', NULL, false, array())))));
     // This also disables scanning of class A.
     $di->setDefinitionList(new DefinitionList(new Definition\ArrayDefinition($arrayDefinition)));
     $di->instanceManager()->addSharedInstance(new $sharedInstanceClass(), $sharedInstanceClass);
     $returnedC = $di->get($retrievedInstanceClass, array('params' => array('test')));
     $this->assertInstanceOf($retrievedInstanceClass, $returnedC);
 }
Exemplo n.º 5
0
 /**
  * @param Di    $di
  * @param array $definition
  */
 public function configureDefinition(Di $di, $definition)
 {
     foreach ($definition as $definitionType => $definitionData) {
         switch ($definitionType) {
             case 'compiler':
                 foreach ($definitionData as $filename) {
                     if (is_readable($filename)) {
                         $di->definitions()->addDefinition(new ArrayDefinition(include $filename), false);
                     }
                 }
                 break;
             case 'runtime':
                 if (isset($definitionData['enabled']) && !$definitionData['enabled']) {
                     // Remove runtime from definition list if not enabled
                     $definitions = array();
                     foreach ($di->definitions() as $definition) {
                         if (!$definition instanceof RuntimeDefinition) {
                             $definitions[] = $definition;
                         }
                     }
                     $definitionList = new DefinitionList($definitions);
                     $di->setDefinitionList($definitionList);
                 } elseif (isset($definitionData['use_annotations']) && $definitionData['use_annotations']) {
                     /* @var $runtimeDefinition Definition\RuntimeDefinition */
                     $runtimeDefinition = $di->definitions()->getDefinitionByType('\\Zend\\Di\\Definition\\RuntimeDefinition');
                     $runtimeDefinition->getIntrospectionStrategy()->setUseAnnotations(true);
                 }
                 break;
             case 'class':
                 foreach ($definitionData as $className => $classData) {
                     $classDefinitions = $di->definitions()->getDefinitionsByType('Zend\\Di\\Definition\\ClassDefinition');
                     foreach ($classDefinitions as $classDefinition) {
                         if (!$classDefinition->hasClass($className)) {
                             unset($classDefinition);
                         }
                     }
                     if (!isset($classDefinition)) {
                         $classDefinition = new Definition\ClassDefinition($className);
                         $di->definitions()->addDefinition($classDefinition, false);
                     }
                     foreach ($classData as $classDefKey => $classDefData) {
                         switch ($classDefKey) {
                             case 'instantiator':
                                 $classDefinition->setInstantiator($classDefData);
                                 break;
                             case 'supertypes':
                                 $classDefinition->setSupertypes($classDefData);
                                 break;
                             case 'methods':
                             case 'method':
                                 foreach ($classDefData as $methodName => $methodInfo) {
                                     if (isset($methodInfo['required'])) {
                                         $classDefinition->addMethod($methodName, $methodInfo['required']);
                                         unset($methodInfo['required']);
                                     }
                                     foreach ($methodInfo as $paramName => $paramInfo) {
                                         $classDefinition->addMethodParameter($methodName, $paramName, $paramInfo);
                                     }
                                 }
                                 break;
                             default:
                                 $methodName = $classDefKey;
                                 $methodInfo = $classDefData;
                                 if (isset($classDefData['required'])) {
                                     $classDefinition->addMethod($methodName, $methodInfo['required']);
                                     unset($methodInfo['required']);
                                 }
                                 foreach ($methodInfo as $paramName => $paramInfo) {
                                     $classDefinition->addMethodParameter($methodName, $paramName, $paramInfo);
                                 }
                         }
                     }
                 }
         }
     }
 }