|
1 | | -Providers Example |
2 | | -================= |
| 1 | +Registering Providers |
| 2 | +===================== |
| 3 | + |
| 4 | +Registering Multiple Providers |
| 5 | +============================= |
3 | 6 |
|
4 | 7 | .. code-block:: php |
5 | 8 |
|
6 | 9 | use FastForward\Container\ServiceProvider\ArrayServiceProvider; |
7 | 10 | use FastForward\Container\ServiceProvider\AggregateServiceProvider; |
8 | | - use FastForward\Container\ServiceProviderContainer; |
| 11 | + use FastForward\Container\container; |
9 | 12 |
|
10 | | - $provider1 = new ArrayServiceProvider([ |
11 | | - 'service' => fn() => new MyService(), |
| 13 | + $providerA = new ArrayServiceProvider([ |
| 14 | + 'mailer' => fn() => new Mailer(), |
| 15 | + ]); |
| 16 | + $providerB = new ArrayServiceProvider([ |
| 17 | + 'notifier' => fn() => new Notifier(), |
12 | 18 | ]); |
13 | | - $provider2 = new ArrayServiceProvider([ |
14 | | - 'other' => fn() => new OtherService(), |
| 19 | +
|
| 20 | + $container = container($providerA, $providerB); |
| 21 | + $mailer = $container->get('mailer'); |
| 22 | + $notifier = $container->get('notifier'); |
| 23 | +
|
| 24 | +Extending Services with Providers |
| 25 | +================================= |
| 26 | + |
| 27 | +.. code-block:: php |
| 28 | +
|
| 29 | + use FastForward\Container\ServiceProvider\ArrayServiceProvider; |
| 30 | + use FastForward\Container\container; |
| 31 | +
|
| 32 | + class UserRepository { |
| 33 | + public function setLogger($logger) { /* ... */ } |
| 34 | + } |
| 35 | +
|
| 36 | + $provider = new ArrayServiceProvider([ |
| 37 | + 'user_repo' => fn() => new UserRepository(), |
| 38 | + 'logger' => fn() => new Logger('app'), |
| 39 | + ], [ |
| 40 | + 'user_repo' => function ($container, $repo) { |
| 41 | + $repo->setLogger($container->get('logger')); |
| 42 | + return $repo; |
| 43 | + }, |
15 | 44 | ]); |
16 | 45 |
|
17 | | - $aggregate = new AggregateServiceProvider($provider1, $provider2); |
18 | | - $container = new ServiceProviderContainer($aggregate); |
| 46 | + $container = container($provider); |
| 47 | + $repo = $container->get('user_repo'); |
| 48 | +
|
| 49 | +Composing Providers for Feature Modules |
| 50 | +====================================== |
| 51 | + |
| 52 | +.. code-block:: php |
| 53 | +
|
| 54 | + use FastForward\Container\ServiceProvider\ArrayServiceProvider; |
| 55 | + use FastForward\Container\ServiceProvider\AggregateServiceProvider; |
| 56 | + use FastForward\Container\container; |
| 57 | +
|
| 58 | + $userProvider = new ArrayServiceProvider([ |
| 59 | + 'user_service' => fn() => new UserService(), |
| 60 | + ]); |
| 61 | + $authProvider = new ArrayServiceProvider([ |
| 62 | + 'auth_service' => fn($container) => new AuthService($container->get('user_service')), |
| 63 | + ]); |
19 | 64 |
|
20 | | - $service = $container->get('service'); |
| 65 | + $aggregate = new AggregateServiceProvider($userProvider, $authProvider); |
| 66 | + $container = container($aggregate); |
| 67 | + $userService = $container->get('user_service'); |
| 68 | + $authService = $container->get('auth_service'); |
0 commit comments