@@ -13,36 +13,57 @@ composer require patchlevel/event-sourcing-psr-container
1313
1414## Documentation
1515
16+ ### Config Builder
17+
18+ To create a configuration array, you can use the ConfigBuilder.
19+ This offers methods to adjust the configuration.
20+
21+ ``` php
22+ $eventSourcingConfig = (new ConfigBuilder())
23+ ->singleTable()
24+ ->databaseUrl('mysql://user:secret@localhost/app')
25+ ->addAggregatePath(__DIR__ . '/Aggregate')
26+ ->addEventPath(__DIR__ . '/Events')
27+ ->addProcessor(SendEmailProcessor::class)
28+ ->addProjector(ProfileProjection::class)
29+ ->build();
30+ ```
31+
1632### Default Build-In Container
1733
34+ The own PSR container implementation already integrates all necessary factories.
35+ So we only have to pass the configuration.
36+
1837``` php
1938use Patchlevel\EventSourcing\Container\ConfigBuilder;
2039use Patchlevel\EventSourcing\Container\DefaultContainer;
2140
22- $config = (new ConfigBuilder())
23- ->singleTable()
24- ->databaseUrl('mysql://user:secret@localhost/app')
25- ->addAggregatePath('src/Domain/Hotel')
26- ->addEventPath('src/Domain/Hotel/Event')
27- ->addProjector(HotelProjection::class)
28- ->addProcessor(SendCheckInEmailProcessor::class)
29- ->build();
30-
3141$container = new DefaultContainer(
32- $config ,
42+ $eventSourcingConfig ,
3343 [
3444 HotelProjection::class => fn(DefaultContainer $container)
3545 => new HotelProjection($container->connection()),
36- SendCheckInEmailProcessor ::class => fn(DefaultContainer $container)
37- => new SendCheckInEmailProcessor ($container->get('mailer')),
46+ SendEmailProcessor ::class => fn(DefaultContainer $container)
47+ => new SendEmailProcessor ($container->get('mailer')),
3848 ]
3949);
4050
51+ $container->get(SchemaDirector::class)->create();
52+
4153$hotelRepository = $container->repository(Hotel::class);
4254```
4355
4456### Laminas Service Manager
4557
58+ Factories can also be used with other PSR-11 compatible libraries.
59+ Here is an example with [ Laminas] ( https://docs.laminas.dev/laminas-servicemanager/ ) .
60+
61+ ``` bash
62+ composer require laminas/laminas-servicemanager
63+ ```
64+
65+ We only have to specify the factories and pass the configuration.
66+
4667``` php
4768use Laminas\ServiceManager\ServiceManager;
4869use Patchlevel\EventSourcing\Repository\RepositoryManager;
@@ -52,29 +73,23 @@ use Patchlevel\EventSourcingPsrContainer\Factory\ConnectionFactory;
5273use Patchlevel\EventSourcingPsrContainer\Factory\RepositoryManagerFactory;
5374use Patchlevel\EventSourcingPsrContainer\Factory\SchemaDirectorFactory;
5475
55- $config = (new ConfigBuilder())
56- ->singleTable()
57- ->databaseUrl('sqlite:///:memory:')
58- ->addAggregatePath(__DIR__ . '/Aggregate')
59- ->addEventPath(__DIR__ . '/Events')
60- ->addProcessor(SendEmailProcessor::class)
61- ->addProjector(ProfileProjection::class)
62- ->build();
63-
6476$serviceManager = new ServiceManager([
6577 'services' => [
6678 'config' => [
67- 'event_sourcing' => $config
79+ 'event_sourcing' => $eventSourcingConfig
6880 ],
6981 SendEmailProcessor::class => new SendEmailProcessor()
7082 ],
7183 'factories' => [
7284 'event_sourcing.connection' => new ConnectionFactory(),
7385 RepositoryManager::class => new RepositoryManagerFactory(),
7486 SchemaDirector::class => new SchemaDirectorFactory(),
75- ProfileProjection ::class => static fn (ServiceManager $container) => new ProfileProjection ($container->get('event_sourcing.connection')),
87+ HotelProjection ::class => static fn (ServiceManager $container) => new HotelProjection ($container->get('event_sourcing.connection')),
7688 ],
7789]);
7890
91+ $serviceManager->get(SchemaDirector::class)->create();
92+
7993$repositoryManager = $serviceManager->get(RepositoryManager::class);
94+ $hotelRepository = $repositoryManager->get(Hotel::class);
8095```
0 commit comments