antidot-framework /
container
| 1 | <?php |
||
| 2 | |||
| 3 | declare(strict_types=1); |
||
| 4 | |||
| 5 | namespace Antidot\Container; |
||
| 6 | |||
| 7 | use Psr\Container\ContainerInterface; |
||
| 8 | use function is_callable; |
||
| 9 | |||
| 10 | class MarshalDelegatorsConfig |
||
| 11 | { |
||
| 12 | 16 | public function __invoke(ContainerConfig $dependencies): ContainerConfig |
|
| 13 | { |
||
| 14 | 16 | foreach ($dependencies->get('delegators') as $service => $delegatorNames) { |
|
| 15 | 2 | $factory = $this->delegateFactories($dependencies, $service); |
|
| 16 | 2 | if (!is_callable($factory)) { |
|
| 17 | continue; |
||
| 18 | } |
||
| 19 | 2 | $dependencies->set(ContainerDelegatorFactory::class, static function () use ($delegatorNames, $factory) { |
|
| 20 | 1 | return new ContainerDelegatorFactory($delegatorNames, $factory); |
|
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
| 21 | 2 | }); |
|
| 22 | 2 | $dependencies->set( |
|
| 23 | 2 | $service, |
|
| 24 | 2 | static function (ContainerInterface $container) use ($service) { |
|
| 25 | 1 | $callable = $container->get(ContainerDelegatorFactory::class); |
|
| 26 | 1 | return $callable($container, $service); |
|
| 27 | 2 | } |
|
| 28 | ); |
||
| 29 | } |
||
| 30 | |||
| 31 | 16 | return $dependencies; |
|
| 32 | } |
||
| 33 | |||
| 34 | 2 | private function delegateFactories( |
|
| 35 | ContainerConfig $dependencies, |
||
| 36 | string $service |
||
| 37 | ): ?callable { |
||
| 38 | 2 | if (false === $dependencies->has($service)) { |
|
| 39 | return null; |
||
| 40 | } |
||
| 41 | // Marshal from factory |
||
| 42 | 2 | $serviceFactory = $dependencies->get($service); |
|
| 43 | 2 | return static function (ContainerInterface $container) use ($service, $serviceFactory) { |
|
| 44 | 1 | return is_callable($serviceFactory) |
|
| 45 | 1 | ? $serviceFactory($container, $service) |
|
| 46 | 1 | : (new $serviceFactory())($container, $service); |
|
| 47 | 2 | }; |
|
| 48 | } |
||
| 49 | } |
||
| 50 |