/** * Create and return abstract factory seeded by dependency injector * * Creates and returns an abstract factory seeded by the dependency * injector. If the "di" key of the configuration service is set, that * sub-array is passed to a DiConfig object and used to configure * the DI instance. The DI instance is then used to seed the * DiAbstractServiceFactory, which is then registered with the service * manager. * * @param ServiceLocatorInterface $serviceLocator * @return Di */ public function createService(ServiceLocatorInterface $serviceLocator) { $di = new Di(); $config = $serviceLocator->get('Config'); if (isset($config['di'])) { $config = new Config($config['di']); $config->configure($di); } return $di; }
public function testWillFetchDependenciesFromServiceManagerBeforeDi() { $controllerName = __NAMESPACE__ . '\\TestAsset\\ControllerWithDependencies'; $config = new Config(array('instance' => array($controllerName => array('parameters' => array('injected' => 'stdClass'))))); $locator = new ServiceManager(); $testService = new \stdClass(); $locator->setService('stdClass', $testService); $di = new Di(); $config->configure($di); $instance = new DiStrictAbstractServiceFactory($di, DiStrictAbstractServiceFactory::USE_SL_BEFORE_DI); $instance->setAllowedServiceNames(array($controllerName)); $service = $instance->createServiceWithName($locator, $controllerName, $controllerName); $this->assertSame($testService, $service->injectedValue); }
/** * {@inheritDoc} */ public function createService(ServiceLocatorInterface $serviceLocator) { $config = $serviceLocator->get('Config'); if (empty($config['di']['cache'])) { return parent::createService($serviceLocator); } $definition = new CachedRuntimeDefinition(); foreach ((array) $config['di']['cache'] as $name => $value) { switch (strtolower($name)) { case 'mincount': case 'min_count': case 'cachemincount': case 'cache_min_count': $definition->setCacheMinCount($value); break; case 'minhitrate': case 'min_hitrate': case 'cacheminhitrate': case 'cache_min_hitrate': $definition->setCacheMinHitrate($value); break; case 'storage': case 'cachestorage': case 'cache_storage': $value = (array) $value; if (empty($value['adapter']['options']['namespace'])) { $namespace = get_class($definition); } else { $namespace = $value['adapter']['options']['namespace']; } $namespace = trim(preg_replace(array('#\\\\+#', '#[^a-z0-9_-]+#'), array('-', '_'), strtolower($namespace)), '-'); $value['adapter']['options']['namespace'] = $namespace; $storage = StorageFactory::factory($value); $definition->setCacheStorage($storage); break; } } $di = new Di(new DefinitionList($definition)); $diConfig = new Config($config['di']); $diConfig->configure($di); return $di; }
/** * Provide a configuration object to configure this instance * * @param Config $config * @return void */ public function configure(Config $config) { $config->configure($this); }
/** * Load DI configuration for specified config area * * @param array $configuration * @return Magento_ObjectManager_Zend */ public function setConfiguration(array $configuration = array()) { if (isset($configuration['preferences']) && is_array($configuration['preferences'])) { $this->_unsetOldPreferences($configuration['preferences']); } $diConfiguration = new Config(array('instance' => $configuration)); $diConfiguration->configure($this->_di); return $this; }
/** * @group nullargs */ public function testNullArgumentsResultInEmptyMethodParameterList() { $this->markTestIncomplete('Null arguments are currently unsupported'); $opt = new Builder\PhpClass(); $opt->setName('ZendTest\\Di\\TestAsset\\OptionalArg'); $optCtor = new Builder\InjectionMethod(); $optCtor->setName('__construct')->addParameter('param', null); $optInject = new Builder\InjectionMethod(); $optInject->setName('inject')->addParameter('param1', null)->addParameter('param2', null); $opt->addInjectionMethod($optCtor)->addInjectionMethod($optInject); $def = new Definition(); $def->addClass($opt); $this->di->setDefinition($def); $cfg = new Config(array('instance' => array('alias' => array('optional' => 'ZendTest\\Di\\TestAsset\\OptionalArg')), 'properties' => array('ZendTest\\Di\\TestAsset\\OptionalArg' => array('param' => null, 'param1' => null, 'param2' => null)))); $cfg->configure($this->di); $builder = new ContainerGenerator($this->di); $builder->setContainerClass('Container'); $codeGen = $builder->getCodeGenerator(); $classBody = $codeGen->generate(); $this->assertNotContains('NULL)', $classBody, $classBody); }
/** * Load DI configuration for specified config area * * @param string $areaCode * @return Magento_ObjectManager_Zend */ public function loadAreaConfiguration($areaCode = null) { if (!$areaCode) { $areaCode = self::CONFIGURATION_AREA; } /** @var $magentoConfiguration Mage_Core_Model_Config */ $magentoConfiguration = $this->get('Mage_Core_Model_Config'); $node = $magentoConfiguration->getNode($areaCode . '/' . self::CONFIGURATION_DI_NODE); if ($node) { $diConfiguration = new Config(array('instance' => $node->asArray())); $diConfiguration->configure($this->_di); } return $this; }
public function configureDi(AbstractTestCase $testCase) { if (!$this->testCaseConfigurationObject instanceof TestCaseConfiguration) { if ($testCase->getDi() instanceof Di) { $testCaseConfiguration = $testCase->get($this->testCaseConfiguration); if ($testCaseConfiguration instanceof TestCaseConfiguration) { $this->testCaseConfigurationObject = $testCaseConfiguration; } } else { $this->testCaseConfigurationObject = new $this->testCaseConfiguration($this->configurationProvider, new DefaultPropertyCollector()); } } if ($testCase->getDi() instanceof Di) { return; } /* @var $configuration TestCaseConfiguration */ $configArray = $this->getDefaultConfiguration(); $count = 0; $path = realpath(__DIR__ . '/../'); while ($count++ < 5) { $dir = "{$path}/configuration/"; if (is_dir($dir)) { foreach (glob($dir . '*.php') as $file) { $configArray = array_merge_recursive($configArray, include $file); } break; } $path .= '/../'; } $configArray = $this->testCaseConfigurationObject->reprocessConfiguration($configArray); $configuration = new Config($configArray); $di = new Di(); $configuration->configure($di); $testCase->setDi($di); $di->instanceManager()->addSharedInstance($di, Di::class); $this->setConfigurationProvider($testCase); }
/** * @param $config * @param null|Di $di * @return string */ protected function getDiDefinitions($config, Di $di = null) { ErrorHandler::start(); if ($arrayDefinitions = (include $config['ocra_di_compiler']['compiled_di_definitions_filename'])) { ErrorHandler::stop(); return $config['ocra_di_compiler']['compiled_di_definitions_filename']; } ErrorHandler::stop(); if (!$di) { $di = new Di(); if (isset($config['di'])) { $diConfig = new DiConfig($config['di']); $diConfig->configure($di); } } $dumper = new Dumper($di); $definitionsCompiler = new ClassListCompilerDefinition(); $definitionsCompiler->addClassesToProcess($dumper->getAllClasses()); $definitionsCompiler->compile(); $fileGenerator = new FileGenerator(); $fileGenerator->setFilename($config['ocra_di_compiler']['compiled_di_definitions_filename']); $fileGenerator->setBody('return ' . var_export($definitionsCompiler->toArrayDefinition()->toArray(), true) . ';'); $fileGenerator->write(); return $config['ocra_di_compiler']['compiled_di_definitions_filename']; }