<?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