Skip to content

Commit ee6aadb

Browse files
committed
✨ Use service locator for AggregateControllerQueryProviderFactory instead of global DI container
1 parent e342b26 commit ee6aadb

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/DependencyInjection/GraphQLiteCompilerPass.php

+10
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Component\Cache\Adapter\ApcuAdapter;
1818
use Symfony\Component\Cache\Adapter\PhpFilesAdapter;
1919
use Symfony\Component\Cache\Psr16Cache;
20+
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
2021
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
2122
use Symfony\Component\DependencyInjection\ContainerBuilder;
2223
use Symfony\Component\DependencyInjection\Definition;
@@ -297,12 +298,21 @@ public function process(ContainerBuilder $container): void
297298
private function registerController(string $controllerClassName, ContainerBuilder $container): void
298299
{
299300
$aggregateQueryProvider = $container->findDefinition(AggregateControllerQueryProviderFactory::class);
301+
300302
$controllersList = $aggregateQueryProvider->getArgument(0);
301303
if (!is_array($controllersList)){
302304
throw new GraphQLException(sprintf('Expecting array in %s, arg #1', AggregateControllerQueryProviderFactory::class));
303305
}
306+
304307
$controllersList[] = $controllerClassName;
305308
$aggregateQueryProvider->setArgument(0, $controllersList);
309+
310+
$serviceLocatorMap = [];
311+
foreach ($controllersList as $controller) {
312+
$serviceLocatorMap[$controller] = new Reference($controller);
313+
}
314+
315+
$aggregateQueryProvider->setArgument(1, new ServiceLocatorArgument($serviceLocatorMap));
306316
}
307317

308318
/**

src/Resources/config/container/graphqlite.xml

+4-1
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,13 @@
2626
</service>
2727

2828
<service id="TheCodingMachine\GraphQLite\AggregateControllerQueryProviderFactory">
29+
<!-- Controller classes list will be generated by compiler pass -->
2930
<argument type="collection">
3031
</argument>
31-
<argument type="service" id="service_container">
32+
<!-- Service locator will be generated by compiler pass -->
33+
<argument type="service_locator">
3234
</argument>
35+
3336
<tag name="graphql.queryprovider_factory" />
3437
</service>
3538

0 commit comments

Comments
 (0)