Skip to content
This repository has been archived by the owner on Jan 8, 2020. It is now read-only.

Commit

Permalink
Merge branch 'hotfix/3348'
Browse files Browse the repository at this point in the history
Close #3423
Fixes #3348
  • Loading branch information
weierophinney committed Jan 14, 2013
2 parents be568cf + ac29623 commit 054f7a0
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 4 deletions.
13 changes: 9 additions & 4 deletions library/Zend/ServiceManager/ServiceManager.php
Expand Up @@ -419,16 +419,21 @@ public function get($name, $usePeeringServiceManagers = true)
} while ($this->hasAlias($cName)); } while ($this->hasAlias($cName));
} }


if (isset($this->instances[$cName])) {
return $this->instances[$cName];
}

$instance = null; $instance = null;
$retrieveFromPeeringManagerFirst = $this->retrieveFromPeeringManagerFirst(); $retrieveFromPeeringManagerFirst = $this->retrieveFromPeeringManagerFirst();


if ($usePeeringServiceManagers && $retrieveFromPeeringManagerFirst) { if ($usePeeringServiceManagers && $retrieveFromPeeringManagerFirst) {
$instance = $this->retrieveFromPeeringManager($name); $instance = $this->retrieveFromPeeringManager($name);

if(null !== $instance) {
return $instance;
}
} }

if (isset($this->instances[$cName])) {
return $this->instances[$cName];
}

if (!$instance) { if (!$instance) {
if ($this->canCreate(array($cName, $name))) { if ($this->canCreate(array($cName, $name))) {
$instance = $this->create(array($cName, $name)); $instance = $this->create(array($cName, $name));
Expand Down
32 changes: 32 additions & 0 deletions tests/ZendTest/ServiceManager/ServiceManagerTest.php
Expand Up @@ -667,4 +667,36 @@ public function testDuplicateNewInstanceMultipleAbstractFactories()
$this->assertInstanceOf('ZendTest\ServiceManager\TestAsset\Bar', $this->serviceManager->get('bar')); $this->assertInstanceOf('ZendTest\ServiceManager\TestAsset\Bar', $this->serviceManager->get('bar'));
$this->assertInstanceOf('ZendTest\ServiceManager\TestAsset\Bar', $this->serviceManager->get('bar')); $this->assertInstanceOf('ZendTest\ServiceManager\TestAsset\Bar', $this->serviceManager->get('bar'));
} }

/**
* @covers Zend\ServiceManager\ServiceManager::setService
* @covers Zend\ServiceManager\ServiceManager::get
* @covers Zend\ServiceManager\ServiceManager::retrieveFromPeeringManagerFirst
* @covers Zend\ServiceManager\ServiceManager::setRetrieveFromPeeringManagerFirst
* @covers Zend\ServiceManager\ServiceManager::addPeeringServiceManager
*/
public function testRetrieveServiceFromPeeringServiceManagerIfretrieveFromPeeringManagerFirstSetToTrueAndServiceNamesAreSame()
{
$foo1 = "foo1";
$boo1 = "boo1";
$boo2 = "boo2";

$this->serviceManager->setService($foo1, $boo1);
$this->assertEquals($this->serviceManager->get($foo1), $boo1);

$serviceManagerChild = new ServiceManager();
$serviceManagerChild->setService($foo1, $boo2);
$this->assertEquals($serviceManagerChild->get($foo1), $boo2);

$this->assertFalse($this->serviceManager->retrieveFromPeeringManagerFirst());
$this->serviceManager->setRetrieveFromPeeringManagerFirst(true);
$this->assertTrue($this->serviceManager->retrieveFromPeeringManagerFirst());

$this->serviceManager->addPeeringServiceManager($serviceManagerChild);

$this->assertContains($serviceManagerChild, $this->readAttribute($this->serviceManager, 'peeringServiceManagers'));

$this->assertEquals($serviceManagerChild->get($foo1), $boo2);
$this->assertEquals($this->serviceManager->get($foo1), $boo2);
}
} }

0 comments on commit 054f7a0

Please sign in to comment.