<?php use NewsCorpAU\Foundation\ServiceLocator; ServiceLocator::setServiceLocator(new ServiceLocator()); ServiceLocator::getServiceLocator()->set('config', '\\NewsCorpAU\\Config')->set('service1', function (ServiceLocator $serviceLocator) { $config = $serviceLocator->get('config'); // get dependency return new \NewsCorpAU\Plugin($config); // inject dependency })->setShared('service2', new NewsCorpAU\Plugin())->set('service3', new ServiceFactory()); // register factory ServiceLocator::getServiceLocator()->get('service1'); // create and return new instance of \NewsCorpAU\Plugin calling the factory $service = ServiceLocator::getServiceLocator()->get('service3'); // returns \stdClass echo $service->counter; // output 1 $service = ServiceLocator::getServiceLocator()->get('service3'); // returns \stdClass echo $service->counter; // output 2
<?php use NewsCorpAU\Foundation\ServiceLocator; ServiceLocator::getServiceLocator()->set('dependency1', new MockObject())->set('dependency2', new MockObject())->set('service', function (ServiceLocator $serviceLocator) { $dependency1 = $serviceLocator->get('dependency1'); $dependency2 = $serviceLocator->get('dependency1'); return new ServiceObject($dependency1, $dependency2); }); ServiceLocator::getServiceLocator()->get('service'); // returns service with injected mock dependencies