/**
  * @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');
 }
예제 #2
0
 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));
 }
예제 #5
0
 /**
  * @param array $config
  * @return Di
  */
 protected function createDi($config)
 {
     $di = new Di();
     if (isset($config['di'])) {
         $di->configure(new DiConfig($config['di']));
     }
     return $di;
 }
예제 #6
0
 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');
 }
예제 #7
0
 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();
 }
예제 #8
0
 /**
  * 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;
 }
예제 #9
0
 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');
 }
예제 #10
0
 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]);
 }
예제 #11
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();
 }
예제 #12
0
 /**
  * @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;
     }
 }
예제 #13
0
 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);
             }
         }
     }
 }
예제 #14
0
 /**
  * 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;
 }
예제 #15
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;
 }
예제 #16
0
 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'));
 }
예제 #17
0
파일: Console.php 프로젝트: rickogden/zf2
    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);
 }
예제 #20
0
 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');
 }
예제 #21
0
 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;
 }
예제 #22
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;
     }
 }
예제 #23
0
 /**
  * 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);
 }
예제 #24
0
파일: Console.php 프로젝트: nevvermind/zf2
 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;
 }
예제 #25
0
 /**
  * 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);
         }
     }
 }
예제 #26
0
 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);
 }
예제 #27
0
 /**
  * @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);
 }
예제 #28
0
 /**
  * Is command exist
  *
  * @param string $commandClass Command class
  *
  * @return bool
  */
 protected function _isCommandExist($commandClass)
 {
     return in_array($commandClass, $this->_di->instanceManager()->getClasses());
 }
예제 #29
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);
 }
 /**
  * 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);
     }
 }