/** * @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'); }
public function testPassingInvalidDefinitionRaisesException() { $di = new Di(); $this->setExpectedException('PHPUnit_Framework_Error'); $di->setDefinitionList(array('foo')); }
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()); }
/** * @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); }
/** * @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); } } } } } } }