@@ -77,12 +77,33 @@ argument of type ``service_closure``:
7777 namespace Symfony\Component\DependencyInjection\Loader\Configurator;
7878
7979 use App\Service\MyService;
80- use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
81- use Symfony\Component\DependencyInjection\Reference;
80+ use function Symfony\Component\DependencyInjection\Loader\Configurator\service_closure;
8281
8382 return function (ContainerConfigurator $configurator) {
8483 $services = $configurator->services();
8584
8685 $services->set(MyService::class)
87- ->args([new ServiceClosureArgument(new Reference('mailer'))]);
86+ ->args([service_closure('mailer')]);
87+
88+ // In case the dependency is optional
89+ // $services->set(MyService::class)
90+ // ->args([service_closure('mailer')->nullOnInvalid()]);
8891 };
92+
93+ Using Service Closures in Compiler Passes
94+ -----------------------------------------
95+
96+ In :doc: `compiler passes </service_container/compiler_passes >` you can create
97+ a service closure by wrapping the service reference into an instance of
98+ :class: `Symfony\\ Component\\ DependencyInjection\\ Argument\\ ServiceClosureArgument `::
99+
100+ use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
101+ use Symfony\Component\DependencyInjection\ContainerBuilder;
102+ use Symfony\Component\DependencyInjection\Reference;
103+
104+ public function process(ContainerBuilder $container): void
105+ {
106+ // ...
107+
108+ $myService->addArgument(new ServiceClosureArgument(new Reference('mailer')));
109+ }
0 commit comments