-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathContainerBuilderFactory.php
More file actions
79 lines (62 loc) · 2.43 KB
/
ContainerBuilderFactory.php
File metadata and controls
79 lines (62 loc) · 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
declare(strict_types=1);
namespace Simara\Cart\Infrastructure\Symfony;
use Doctrine\DBAL\Connection;
use Doctrine\ORM\EntityManager;
use Simara\Cart\Application\CartUseCase;
use Simara\Cart\Application\CartUseCaseApplication;
use Simara\Cart\Domain\Cart\Cart;
use Simara\Cart\Domain\Cart\CartRepository;
use Simara\Cart\Domain\Cart\Item;
use Simara\Cart\Domain\Prices\Prices;
use Simara\Cart\Infrastructure\CsvPrices;
use Simara\Cart\Infrastructure\DoctrineCartRepository;
use Simara\Cart\Infrastructure\MemoryCartRepository;
use Simara\Cart\Utils\ConnectionManager;
use Simara\Cart\Utils\EntityManagerFactory;
use Symfony\Component\DependencyInjection\ContainerBuilder;
final class ContainerBuilderFactory
{
public static function create(
string $pricesCsvPath,
): ContainerBuilder {
$containerBuilder = new ContainerBuilder();
$containerBuilder
->register(Connection::class, Connection::class)
->setFactory([ConnectionManager::class, 'createConnection']);
$containerBuilder
->register(EntityManager::class, EntityManager::class)
->setFactory([EntityManagerFactory::class, 'createEntityManager'])
->setArgument('$schemaClassNames', [Cart::class, Item::class])
->setArgument('$types', [])
->setAutowired(true);
$containerBuilder
->register(CartRepository::class, DoctrineCartRepository::class)
->setAutowired(true);
$containerBuilder
->register(Prices::class, CsvPrices::class)
->addArgument($pricesCsvPath);
$containerBuilder
->register(CartUseCase::class, CartUseCaseApplication::class)
->setAutowired(true)
->setPublic(true);
$containerBuilder->compile();
return $containerBuilder;
}
public static function createInMemory(
string $pricesCsvPath,
): ContainerBuilder {
$containerBuilder = new ContainerBuilder();
$containerBuilder
->register(CartRepository::class, MemoryCartRepository::class);
$containerBuilder
->register(Prices::class, CsvPrices::class)
->addArgument($pricesCsvPath);
$containerBuilder
->register(CartUseCase::class, CartUseCaseApplication::class)
->setAutowired(true)
->setPublic(true);
$containerBuilder->compile();
return $containerBuilder;
}
}