diff --git a/library/Zend/ServiceManager/ServiceManager.php b/library/Zend/ServiceManager/ServiceManager.php index 969a7e951f7..65d612fe489 100644 --- a/library/Zend/ServiceManager/ServiceManager.php +++ b/library/Zend/ServiceManager/ServiceManager.php @@ -501,6 +501,14 @@ public function get($name, $usePeeringServiceManagers = true) || $this->canCreateFromAbstractFactory($cName, $name) ) { $instance = $this->create(array($cName, $name)); + } elseif ($isAlias && $this->canCreateFromAbstractFactory($name, $cName)) { + /* + * case of an alias leading to an abstract factory : + * 'my-alias' => 'my-abstract-defined-service' + * $name = 'my-alias' + * $cName = 'my-abstract-defined-service' + */ + $instance = $this->create(array($name, $cName)); } elseif ($usePeeringServiceManagers && !$this->retrieveFromPeeringManagerFirst) { $instance = $this->retrieveFromPeeringManager($name); } diff --git a/tests/ZendTest/ServiceManager/ServiceManagerTest.php b/tests/ZendTest/ServiceManager/ServiceManagerTest.php index 37f3e1923c9..81332163797 100644 --- a/tests/ZendTest/ServiceManager/ServiceManagerTest.php +++ b/tests/ZendTest/ServiceManager/ServiceManagerTest.php @@ -240,6 +240,16 @@ public function testGetWithAlias() $this->assertEquals('bar', $this->serviceManager->get('baz')); } + /** + * @covers Zend\ServiceManager\ServiceManager::get + */ + public function testGetAbstractFactoryWithAlias() + { + $this->serviceManager->addAbstractFactory('ZendTest\ServiceManager\TestAsset\FooAbstractFactory'); + $this->serviceManager->setAlias('foo', 'ZendTest\ServiceManager\TestAsset\FooAbstractFactory'); + $this->assertInstanceOf('ZendTest\ServiceManager\TestAsset\Foo', $this->serviceManager->get('foo')); + } + /** * @covers Zend\ServiceManager\ServiceManager::get */