Skip to content

Commit bf8f2ec

Browse files
committed
Update docs
Signed-off-by: Felipe Sayão Lobato Abreu <github@mentordosnerds.com>
1 parent bb1311b commit bf8f2ec

3 files changed

Lines changed: 151 additions & 24 deletions

File tree

docs/examples/basic.rst

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,60 @@
1-
Basic Example
2-
=============
1+
2+
Basic Usage
3+
===========
4+
5+
Registering and Fetching Services
6+
=================================
7+
8+
This example shows how to register and retrieve services using the container helper.
39

410
.. code-block:: php
511
12+
use FastForward\Container\ServiceProvider\ArrayServiceProvider;
613
use FastForward\Container\container;
14+
15+
$provider = new ArrayServiceProvider([
16+
'logger' => fn() => new Monolog\Logger('app'),
17+
'pdo' => fn() => new PDO('sqlite::memory:'),
18+
]);
19+
20+
$container = container($provider);
21+
$logger = $container->get('logger');
22+
$pdo = $container->get('pdo');
23+
24+
Using Configuration to Register Providers
25+
========================================
26+
27+
You can use a configuration object to register providers dynamically:
28+
29+
.. code-block:: php
30+
731
use FastForward\Config\ArrayConfig;
32+
use FastForward\Container\container;
33+
use FastForward\Container\ServiceProvider\ArrayServiceProvider;
834
935
$config = new ArrayConfig([
1036
FastForward\Container\ContainerInterface::class => [
11-
SomeServiceProvider::class,
12-
new OtherServiceProvider(),
37+
new ArrayServiceProvider([
38+
'cache' => fn() => new MyCache(),
39+
]),
1340
],
1441
]);
1542
1643
$container = container($config);
17-
$service = $container->get(SomeService::class);
44+
$cache = $container->get('cache');
45+
46+
Autowiring a Service (using PHP-DI)
47+
===================================
48+
49+
The container supports autowiring for classes with type-hinted dependencies:
50+
51+
.. code-block:: php
52+
53+
use FastForward\Container\container;
54+
55+
class MyService {
56+
public function __construct(MyDependency $dep) { /* ... */ }
57+
}
58+
59+
$container = container();
60+
$service = $container->get(MyService::class); // MyDependency is autowired

docs/examples/factories.rst

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,54 @@
1-
Factories Example
2-
=================
1+
2+
Using Factories
3+
===============
4+
5+
Using CallableFactory for Dependency Injection
6+
==============================================
37

48
.. code-block:: php
59
610
use FastForward\Container\Factory\CallableFactory;
11+
12+
$factory = new CallableFactory(fn($container) => new Mailer($container->get('logger')));
13+
$mailer = $factory($container);
14+
15+
Aliasing Services with AliasFactory
16+
==================================
17+
18+
.. code-block:: php
19+
720
use FastForward\Container\Factory\AliasFactory;
21+
22+
$factory = new AliasFactory('mailer');
23+
$sameMailer = $factory($container); // Returns the same as $container->get('mailer')
24+
25+
Invoking Classes with InvokableFactory
26+
=====================================
27+
28+
.. code-block:: php
29+
830
use FastForward\Container\Factory\InvokableFactory;
31+
32+
$factory = new InvokableFactory(MyService::class, 'arg1', 'arg2');
33+
$service = $factory($container);
34+
35+
Calling Static Methods with MethodFactory
36+
========================================
37+
38+
.. code-block:: php
39+
940
use FastForward\Container\Factory\MethodFactory;
10-
use FastForward\Container\Factory\ServiceFactory;
1141
12-
$callableFactory = new CallableFactory(fn($container) => new MyService($container->get(Dep::class)));
13-
$aliasFactory = new AliasFactory('other_service');
14-
$invokableFactory = new InvokableFactory(MyService::class, 'arg1');
15-
$methodFactory = new MethodFactory(MyService::class, 'staticMethod', 'arg1');
16-
$serviceFactory = new ServiceFactory(new MyService());
42+
$factory = new MethodFactory(MyService::class, 'build', 'arg1');
43+
$service = $factory($container);
44+
45+
Wrapping Existing Instances with ServiceFactory
46+
==============================================
47+
48+
.. code-block:: php
49+
50+
use FastForward\Container\Factory\ServiceFactory;
1751
18-
$service = $callableFactory($container);
52+
$instance = new MyService();
53+
$factory = new ServiceFactory($instance);
54+
$service = $factory($container); // Always returns $instance

docs/examples/providers.rst

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,68 @@
1-
Providers Example
2-
=================
1+
Registering Providers
2+
=====================
3+
4+
Registering Multiple Providers
5+
=============================
36

47
.. code-block:: php
58
69
use FastForward\Container\ServiceProvider\ArrayServiceProvider;
710
use FastForward\Container\ServiceProvider\AggregateServiceProvider;
8-
use FastForward\Container\ServiceProviderContainer;
11+
use FastForward\Container\container;
912
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(),
1218
]);
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+
},
1544
]);
1645
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+
]);
1964
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

Comments
 (0)