diff --git a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php index cbf6a678a4ef3..085089cad4591 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php @@ -136,6 +136,13 @@ private function populateAvailableTypes() foreach ($this->container->getDefinitions() as $id => $definition) { $this->populateAvailableType($id, $definition); } + + if ($this->container->hasParameter('autowiring.map')) { + $this->types = array_merge( + $this->types, + $this->container->getParameter('autowiring.map') + ); + } } /** diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php index 658b66131b46a..9d1da5c1f0079 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php @@ -412,6 +412,29 @@ public function testOptionalScalarArgsNotPassedIfLast() $definition->getArguments() ); } + + public function testGlobalParameterMapSet() + { + $container = new ContainerBuilder(); + + // two services matching CollisionInterface + // c1 is configured to autowire for CollisionInterface + $container->register('c1', __NAMESPACE__.'\CollisionA') + ->addAutowiringType(__NAMESPACE__.'\CollisionInterface'); + $container->register('c2', __NAMESPACE__.'\CollisionB'); + $aDefinition = $container->register('a', __NAMESPACE__.'\CannotBeAutowired'); + $aDefinition->setAutowired(true); + + $container->setParameter('autowiring.map', array( + __NAMESPACE__.'\CollisionInterface' => 'c2' + )); + + $pass = new AutowirePass(); + $pass->process($container); + + $aDefinition = $container->getDefinition('a'); + $this->assertEquals(array(new Reference('c2')), $aDefinition->getArguments()); + } } class Foo