diff --git a/DependencyInjection/Compiler/TaggedServiceMappingPass.php b/DependencyInjection/Compiler/TaggedServiceMappingPass.php index 7fd31ecf3..f0db04fc0 100644 --- a/DependencyInjection/Compiler/TaggedServiceMappingPass.php +++ b/DependencyInjection/Compiler/TaggedServiceMappingPass.php @@ -12,7 +12,6 @@ namespace Overblog\GraphQLBundle\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; -use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Reference; @@ -43,9 +42,9 @@ public function process(ContainerBuilder $container) foreach ($mapping as $name => $options) { $cleanOptions = $options; $solutionID = $options['id']; - $solution = $container->get($solutionID); - if ($solution instanceof ContainerAwareInterface) { + $definition = $container->findDefinition($solutionID); + if (is_subclass_of($definition->getClass(), 'Symfony\Component\DependencyInjection\ContainerAwareInterface')) { $solutionDefinition = $container->findDefinition($options['id']); $solutionDefinition->addMethodCall('setContainer', [new Reference('service_container')]); } diff --git a/Tests/DependencyInjection/Compiler/FakeCompilerPass.php b/Tests/DependencyInjection/Compiler/FakeCompilerPass.php new file mode 100644 index 000000000..92502c4af --- /dev/null +++ b/Tests/DependencyInjection/Compiler/FakeCompilerPass.php @@ -0,0 +1,22 @@ +getDefinition('test_resolver') + ->addArgument(new Reference('injected_service')) + ; + } +} diff --git a/Tests/DependencyInjection/Compiler/FakeInjectedService.php b/Tests/DependencyInjection/Compiler/FakeInjectedService.php new file mode 100644 index 000000000..1631fee23 --- /dev/null +++ b/Tests/DependencyInjection/Compiler/FakeInjectedService.php @@ -0,0 +1,14 @@ +setDefinition( + 'injected_service', + new Definition('Overblog\GraphQLBundle\Tests\DependencyInjection\Compiler\FakeInjectedService') + ); + + $container->register( + 'overblog_graphql.resolver_resolver', + "Overblog\\GraphQLBundle\\Resolver\\ResolverResolver" + ); + + $testResolver = new Definition('Overblog\GraphQLBundle\Tests\DependencyInjection\Compiler\ResolverTestService'); + $testResolver + ->addTag( 'overblog_graphql.resolver', [ + 'alias' => 'test_resolver', 'method' => 'doSomethingWithContainer' + ]); + + $container->setDefinition('test_resolver', $testResolver); + + $this->container = $container; + } + + private function addCompilerPassesAndCompile() + { + $this->container->addCompilerPass(new ResolverTaggedServiceMappingPass()); + $this->container->addCompilerPass(new FakeCompilerPass()); + $this->container->compile(); + } + + public function testCompilationWorksPassConfigDirective() + { + $this->addCompilerPassesAndCompile(); + + $this->assertTrue($this->container->has('test_resolver')); + } +} diff --git a/Tests/DependencyInjection/Compiler/ResolverTestService.php b/Tests/DependencyInjection/Compiler/ResolverTestService.php new file mode 100644 index 000000000..5149e5bce --- /dev/null +++ b/Tests/DependencyInjection/Compiler/ResolverTestService.php @@ -0,0 +1,24 @@ +container->get('injected_service')->doSomething(); + } +}