/** * @param SourceNameInterface $sourceNameData * * @return CollectionInterface */ public function createCollection(SourceNameInterface $sourceNameData) { if (!is_null($sourceNameData->getUsername()) || $sourceNameData->getSource() === SourceNameInterface::SOURCE_USER) { return $this->di->get('Frontend\\Service\\Instagram\\Images\\UserCollectionService', array('nameData' => $sourceNameData)); } return $this->di->get('Frontend\\Service\\Instagram\\Images\\FeedCollectionService'); }
public function testConfigurationCanConfigureBuilderDefinitionFromIni() { $this->markTestIncomplete('Builder not updated to new DI yet'); $ini = new \Zend\Config\Ini(__DIR__ . '/_files/sample.ini', 'section-b'); $config = new Configuration($ini->di); $di = new Di($config); $definition = $di->getDefinition(); $this->assertTrue($definition->hasClass('My\DbAdapter')); $this->assertEquals('__construct', $definition->getInstantiator('My\DbAdapter')); $this->assertEquals( array('username' => null, 'password' => null), $definition->getInjectionMethodParameters('My\DbAdapter', '__construct') ); $this->assertTrue($definition->hasClass('My\Mapper')); $this->assertEquals('__construct', $definition->getInstantiator('My\Mapper')); $this->assertEquals( array('dbAdapter' => 'My\DbAdapter'), $definition->getInjectionMethodParameters('My\Mapper', '__construct') ); $this->assertTrue($definition->hasClass('My\Repository')); $this->assertEquals('__construct', $definition->getInstantiator('My\Repository')); $this->assertEquals( array('mapper' => 'My\Mapper'), $definition->getInjectionMethodParameters('My\Repository', '__construct') ); }
public function setUp() { $this->mock = $this->getMock('Tillikum\\Billing\\Event\\Strategy\\StrategyInterface'); $di = new Di\Di(); $im = $di->instanceManager(); $im->addSharedInstance($this->mock, 'TestStrategyAlias'); $this->processor = new BookingProcessor($di); $rule = new FacilityBookingRule(); $config = new FacilityBookingRuleConfig(); $config->amount = 10.0; $config->currency = 'USD'; $config->start = new DateTime('2010-07-01'); $config->end = new DateTime('2010-07-15'); $config->strategy = 'TestStrategyAlias'; $rule->configs->add($config); $config = new FacilityBookingRuleConfig(); $config->amount = 20.0; $config->currency = 'USD'; $config->start = new DateTime('2010-07-15'); $config->end = new DateTime('2010-07-31'); $config->strategy = 'TestStrategyAlias'; $rule->configs->add($config); $this->event = new FacilityBookingEvent(); $this->event->start = new DateTime('2010-07-01'); $this->event->end = new DateTime('2010-07-15'); $this->event->rule = $rule; }
public function configureDi(Di $di) { $di->instanceManager()->addSharedInstance($this->configurationReader, get_class($this->configurationReader)); $di->instanceManager()->addSharedInstance($this->classConfigurationReader, get_class($this->classConfigurationReader)); $di->instanceManager()->addSharedInstance($this->environmentConfigurationReader, get_class($this->environmentConfigurationReader)); $di->instanceManager()->addSharedInstance($this, get_class($this)); }
/** * @param array $config * @return Di */ protected function createDi($config) { $di = new Di(); if (isset($config['di'])) { $di->configure(new DiConfig($config['di'])); } return $di; }
public function createService(ServiceLocatorInterface $oServiceLocator) { $oServiceLocator = $oServiceLocator->getServiceLocator(); $oAppService = $oServiceLocator->get('AppService'); $oDi = new Di(); $oDi->instanceManager()->setParameters('API\\Controller\\IndexController', array('app' => $oAppService)); return $oDi->get('API\\Controller\\IndexController'); }
public function indexAction() { $config = $this->getServiceLocator('Configuration')->get('Configuration'); $di = new Di(null, null, new Config($config['Di'])); $basemodel = $di->get('NedVisol\\Orm\\BaseModel'); $ret = $basemodel->adapter->putRow('test', array('id' => 'row2', 'columns' => array('cf1.a' => '234', 'cf1.b' => '456'), 'checks' => array('cf1.a' => '999'))); echo "****{$ret}***"; return new ViewModel(); }
/** * Set up dependency injection framework * * @return ServiceManager */ public function init() { $options = $this->getOptions(); $doctrineContainer = $this->getBootstrap()->bootstrap('Doctrine')->getResource('Doctrine'); $di = new ZendDi\Di(null, null, new ZendDi\Config($options)); $di->instanceManager()->addSharedInstance(new Db\Adapter\Driver\Pdo\Pdo($doctrineContainer->getEntityManager()->getConnection()->getWrappedConnection()), 'Zend\\Db\\Adapter\\Driver\\Pdo\\Pdo'); $di->instanceManager()->addSharedInstance($doctrineContainer->getEntityManager(), 'Doctrine\\ORM\\EntityManager'); return $di; }
public function __invoke(array $config = array()) { $di = new Di(); $diConfig = array('definition' => array('class' => array('Zend\\Cache\\Storage\\Adapter' => array('instantiator' => array('Eva\\Cache\\StorageFactory', 'factory')), 'Eva\\Cache\\StorageFactory' => array('methods' => array('factory' => array('cfg' => array('required' => true, 'type' => false)))))), 'instance' => array('Eva\\Cache\\StorageFactory' => array('parameters' => array('cfg' => array('adapter' => array('name' => 'filesystem', 'options' => array('cacheDir' => EVA_ROOT_PATH . '/data/cache/model/')), 'plugins' => array('serializer')))))); $globalConfig = $this->serviceLocator->get('Configuration'); $globalConfig = isset($globalConfig['cache']['model']) ? $globalConfig['cache']['model'] : array(); $diConfig = Config::mergeArray($diConfig, $globalConfig, $config); $di->configure(new DiConfig($diConfig)); return $di->get('Eva\\Cache\\StorageFactory'); }
public function testWillDiscoverInjectedMethodParameters() { $di = new Di(); $a = new A(); $di->instanceManager()->setParameters('ZendTest\\Di\\TestAsset\\SetterInjection\\B', array('a' => $a)); $proxy = new DependencyInjectorProxy($di); $b = $proxy->get('ZendTest\\Di\\TestAsset\\SetterInjection\\B'); $methods = $b->getMethods(); $this->assertSame('setA', $methods[0]['method']); $this->assertSame($a, $methods[0]['params'][0]); }
/** * Run * * @return mixed */ public function run() { $dic = new Model\DiC($this->_di); $dic->assemble(); /** @var \App\Bot\Updater $updater */ $botUpdater = $this->_di->get('BotUpdater'); $botUpdater->checkUpdates(); /** @var \App\Redmine\Updater $redmineUpdater */ $redmineUpdater = $this->_di->get('RedmineUpdater'); $redmineUpdater->checkUpdates(); }
/** * @param $instance */ public function initialize($instance, ServiceLocatorInterface $serviceLocator) { $instanceManager = $this->di->instanceManager; $this->di->instanceManager = $this->diInstanceManagerProxy; try { $this->di->injectDependencies($instance); $this->di->instanceManager = $instanceManager; } catch (\Exception $e) { $this->di->instanceManager = $instanceManager; throw $e; } }
public function render() { $knownClasses = array(); echo 'Definitions' . PHP_EOL . PHP_EOL; foreach ($this->di->definitions() as $definition) { $this->renderDefinition($definition); foreach ($definition->getClasses() as $class) { $knownClasses[] = $class; $this->renderClassDefinition($definition, $class); } if (count($definition->getClasses()) == 0) { echo PHP_EOL . ' No Classes Found' . PHP_EOL . PHP_EOL; } } if ($this->runtimeClasses) { echo ' Runtime classes:' . PHP_EOL; } $unknownRuntimeClasses = array_diff($this->runtimeClasses, $knownClasses); foreach ($unknownRuntimeClasses as $runtimeClass) { $definition = $this->di->definitions()->getDefinitionForClass($runtimeClass); $this->renderClassDefinition($definition, $runtimeClass); } echo PHP_EOL . 'Instance Configuration Info:' . PHP_EOL; echo PHP_EOL . ' Aliases:' . PHP_EOL; $configuredTypes = array(); foreach ($this->di->instanceManager()->getAliases() as $alias => $class) { echo ' ' . $alias . ' [type: ' . $class . ']' . PHP_EOL; $configuredTypes[] = $alias; } echo PHP_EOL . ' Classes:' . PHP_EOL; foreach ($this->di->instanceManager()->getClasses() as $class) { echo ' ' . $class . PHP_EOL; $configuredTypes[] = $class; } echo PHP_EOL . ' Configurations:' . PHP_EOL; foreach ($configuredTypes as $type) { $info = $this->di->instanceManager()->getConfiguration($type); echo ' ' . $type . PHP_EOL; if ($info['parameters']) { echo ' parameters:' . PHP_EOL; foreach ($info['parameters'] as $param => $value) { echo ' ' . $param . ' = ' . $value . PHP_EOL; } } if ($info['injections']) { echo ' injections:' . PHP_EOL; foreach ($info['injections'] as $injection => $value) { var_dump($injection, $value); } } } }
/** * 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 DiConfiguration 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('Configuration'); if (isset($config['di'])) { $di->configure(new DiConfiguration($config['di'])); } if ($serviceLocator instanceof ServiceManager) { // register as abstract factory as well: $serviceLocator->addAbstractFactory(new DiAbstractServiceFactory($di, DiAbstractServiceFactory::USE_SL_BEFORE_DI)); } return $di; }
/** * @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; }
public function testConfigurationCanConfigureCompiledDefinition() { $config = ConfigFactory::fromFile(__DIR__ . '/_files/sample.php', true); $config = new Configuration($config->di); $di = new Di(); $di->configure($config); $definition = $di->definitions()->getDefinitionByType('Zend\\Di\\Definition\\ArrayDefinition'); $this->assertInstanceOf('Zend\\Di\\Definition\\ArrayDefinition', $definition); $this->assertTrue($di->definitions()->hasClass('My\\DbAdapter')); $this->assertTrue($di->definitions()->hasClass('My\\EntityA')); $this->assertTrue($di->definitions()->hasClass('My\\Mapper')); $this->assertTrue($di->definitions()->hasClass('My\\RepositoryA')); $this->assertTrue($di->definitions()->hasClass('My\\RepositoryB')); $this->assertFalse($di->definitions()->hasClass('My\\Foo')); }
public function render(Di $di) { echo 'Definitions: ' . PHP_EOL; foreach ($di->definitions() as $definition) { foreach ($definition->getClasses() as $class) { echo PHP_EOL . ' Parameters For Class: ' . $class . PHP_EOL; foreach ($definition->getMethods($class) as $methodName => $methodIsRequired) { foreach ($definition->getMethodParameters($class, $methodName) as $fqName => $pData) { echo ' ' . $pData[0] . ' [type: '; echo ($pData[1]) ? $pData[1] : 'scalar'; echo ($pData[2] === true && $methodIsRequired) ? ', required' : ', not required'; echo ', injection-method: ' . $methodName; echo ' fq-name: ' . $fqName; echo ']' . PHP_EOL; } } } } echo PHP_EOL . 'Instance Configuration Info:' . PHP_EOL; echo PHP_EOL . ' Aliases:' . PHP_EOL; $configuredTypes = array(); foreach ($di->instanceManager()->getAliases() as $alias => $class) { echo ' ' . $alias . ' [type: ' . $class . ']' . PHP_EOL; $configuredTypes[] = $alias; } echo PHP_EOL . ' Classes:' . PHP_EOL; foreach ($di->instanceManager()->getClasses() as $class) { echo ' ' . $class . PHP_EOL; $configuredTypes[] = $class; } echo PHP_EOL . ' Configurations:' . PHP_EOL; foreach ($configuredTypes as $type) { $info = $di->instanceManager()->getConfiguration($type); echo ' ' . $type . PHP_EOL; foreach ($info['parameters'] as $param => $value) { echo ' ' . $param . ' = ' . $value . PHP_EOL; } } }
/** * Initialize an instance via zend-di. * * @param mixed|ContainerInterface $first Container when under * zend-servicemanager v3, instance to initialize otherwise. * @param ContainerInterface|mixed $second Instance to initialize when * under zend-servicemanager v3, container otherwise. * @return void */ public function __invoke($first, $second) { if ($first instanceof AbstractPluginManager || $second instanceof ContainerInterface) { $instance = $first; } else { $instance = $second; } $instanceManager = $this->di->instanceManager; $this->di->instanceManager = $this->diInstanceManagerProxy; try { $this->di->injectDependencies($instance); } catch (Exception $e) { throw $e; } finally { $this->di->instanceManager = $instanceManager; } }
/** * {@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); }
protected function __construct(Di $oDi) { $this->oJobQueueDb = $oDi->get('Classes\\Db\\JobQueue'); $this->oBoxDb = $oDi->get('Classes\\Db\\Box'); $this->oFolioDb = $oDi->get('Classes\\Db\\Folio'); $this->oItemDb = $oDi->get('Classes\\Db\\Item'); $this->oErrorLogDb = $oDi->get('Classes\\Db\\ErrorLog'); $this->oFile = $oDi->get('Classes\\Helpers\\File'); $this->oLogger = $oDi->get('Classes\\Helpers\\Logger'); }
public static function factory(array $config = array()) { $defaultConfig = array('di' => array('definition' => array(), 'instance' => array('Eva\\File\\Transfer\\Adapter\\Http' => array('parameters' => array()), 'Eva\\File\\Transfer\\Transfer' => array('parameters' => array('adapter' => 'Eva\\File\\Transfer\\Adapter\\Http'))))); $globalConfig = Api::_()->getConfig(); if (isset($globalConfig['file_transfer'])) { $config = array_merge($defaultConfig, $globalConfig['file_transfer'], $config); } else { $config = array_merge($defaultConfig, $config); } $diConfig = array(); if ($config['di']) { $diConfig = $config['di']; } $di = new Di(); $di->configure(new DiConfig($diConfig)); $fileTransfer = $di->get('Eva\\File\\Transfer\\Transfer'); //p($fileTransfer, 1); //@\Zend\Di\Display\Console::export($di); return $fileTransfer; }
/** * 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; } }
/** * Retrieves all classes that are involved in generating an instance for $name and its dependencies * * @param array|string $name * @return string[] */ public function getClasses($name) { $classes = array(); $instanceDefinitions = $this->getInjectedDefinitions($name); foreach ($instanceDefinitions as $instanceDefinition) { if ($instanceDefinition->getClass()) { $classes[$instanceDefinition->getClass()] = true; continue; } $alias = $this->di->instanceManager()->getClassFromAlias($instanceDefinition->getName()); $classes[$alias] = true; } return array_keys($classes); }
protected function renderClassDefinition($class) { $definitions = $this->di->definitions(); echo PHP_EOL . ' Parameters For Class: ' . $class . PHP_EOL; foreach ($definitions->getMethods($class) as $methodName => $methodIsRequired) { foreach ($definitions->getMethodParameters($class, $methodName) as $fqName => $pData) { echo ' ' . $pData[0] . ' [type: '; echo $pData[1] ? $pData[1] : 'scalar'; echo $pData[2] === true && $methodIsRequired ? ', required' : ', not required'; echo ', injection-method: ' . $methodName; echo ' fq-name: ' . $fqName; echo ']' . PHP_EOL; } } echo PHP_EOL; }
/** * Override, as we want it to use the functionality defined in the proxy * * @param string $name * @param array $params * @return object * @throws Exception\InvalidServiceNameException */ public function get($name, array $params = array()) { // allow this di service to get dependencies from the service locator BEFORE trying di if ($this->useServiceLocator == self::USE_SL_BEFORE_DI && $this->serviceLocator->has($name)) { return $this->serviceLocator->get($name); } try { $service = parent::get($name, $params); return $service; } catch (DiClassNotFoundException $e) { // allow this di service to get dependencies from the service locator AFTER trying di if ($this->useServiceLocator == self::USE_SL_AFTER_DI && $this->serviceLocator->has($name)) { return $this->serviceLocator->get($name); } else { throw new Exception\ServiceNotFoundException(sprintf('Service %s was not found in this DI instance', $name), null, $e); } } }
public function switchThemeConfiguration($fullyQualifiedClassName) { $reflection = new \ReflectionClass($fullyQualifiedClassName); if ($reflection->implementsInterface('Magium\\Themes\\ThemeConfigurationInterface')) { $this->baseThemeClass = $fullyQualifiedClassName; $this->di->instanceManager()->unsetTypePreferences('Magium\\Themes\\ThemeConfigurationInterface'); $this->di->instanceManager()->setTypePreference('Magium\\Themes\\ThemeConfigurationInterface', [$fullyQualifiedClassName]); if ($reflection->implementsInterface('Magium\\Themes\\BaseThemeInterface')) { $this->di->instanceManager()->unsetTypePreferences('Magium\\Themes\\BaseThemeInterface'); $this->di->instanceManager()->setTypePreference('Magium\\Themes\\BaseThemeInterface', [$fullyQualifiedClassName]); } $theme = $this->getTheme(); if ($theme instanceof BaseThemeInterface) { $theme->configure($this); } } else { throw new InvalidConfigurationException('The theme configuration implement Magium\\Themes\\ThemeConfigurationInterface'); } $this->getLogger()->addCharacteristic(Logger::CHARACTERISTIC_THEME, $fullyQualifiedClassName); }
/** * @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 Configuration(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); }
/** * Is command exist * * @param string $commandClass Command class * * @return bool */ protected function _isCommandExist($commandClass) { return in_array($commandClass, $this->_di->instanceManager()->getClasses()); }
/** * @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); }
/** * Overrides Zend\Di to allow the given serviceLocator's services to be reused by Di itself * * {@inheritDoc} * * @throws Exception\InvalidServiceNameException */ public function get($name, array $params = array()) { if (null === $this->serviceLocator) { throw new DomainException('No ServiceLocator defined, use `createServiceWithName` instead of `get`'); } if (self::USE_SL_BEFORE_DI === $this->useServiceLocator && $this->serviceLocator->has($name)) { return $this->serviceLocator->get($name); } try { return parent::get($name, $params); } catch (ClassNotFoundException $e) { if (self::USE_SL_AFTER_DI === $this->useServiceLocator && $this->serviceLocator->has($name)) { return $this->serviceLocator->get($name); } throw new Exception\ServiceNotFoundException(sprintf('Service %s was not found in this DI instance', $name), null, $e); } }