Skip to content

Commit 0d0d9b0

Browse files
committed
Now using GhostObjects in container
1 parent 94fbe37 commit 0d0d9b0

File tree

1 file changed

+75
-48
lines changed

1 file changed

+75
-48
lines changed

src/Services.php

Lines changed: 75 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use ArrayObject;
1010
use Doctrine\ORM\EntityManager;
1111
use League\Event\EventDispatcher;
12+
use ReflectionClass;
1213

1314
/**
1415
* This trait is used to remove complexity from the Driver class.
@@ -41,7 +42,12 @@ static function () use ($config) {
4142
->set(Type\TypeContainer::class, static fn () => new Type\TypeContainer())
4243
->set(
4344
Type\Entity\EntityTypeContainer::class,
44-
static fn (Container $container) => new Type\Entity\EntityTypeContainer($container),
45+
static function (Container $container): Type\Entity\EntityTypeContainer {
46+
return (new ReflectionClass(Type\Entity\EntityTypeContainer::class))
47+
->newLazyGhost(static function (Type\Entity\EntityTypeContainer $object) use ($container): void {
48+
$object->__construct($container);
49+
});
50+
},
4551
)
4652
->set(
4753
'metadata',
@@ -57,77 +63,98 @@ static function (Container $container) use ($metadata) {
5763
)
5864
->set(
5965
Metadata\GlobalEnable::class,
60-
static function (Container $container) {
61-
return new Metadata\GlobalEnable(
62-
$container->get(EntityManager::class),
63-
$container->get(Config::class),
64-
$container->get(EventDispatcher::class),
65-
);
66+
static function (Container $container): Metadata\GlobalEnable {
67+
return (new ReflectionClass(Metadata\GlobalEnable::class))
68+
->newLazyGhost(static function (Metadata\GlobalEnable $object) use ($container): void {
69+
$object->__construct(
70+
$container->get(EntityManager::class),
71+
$container->get(Config::class),
72+
$container->get(EventDispatcher::class),
73+
);
74+
});
6675
},
6776
)
6877
->set(
6978
Resolve\FieldResolver::class,
70-
static function (Container $container) {
71-
return new Resolve\FieldResolver(
72-
$container->get(Config::class),
73-
$container->get(Type\Entity\EntityTypeContainer::class),
74-
);
79+
static function (Container $container): Resolve\FieldResolver {
80+
return (new ReflectionClass(Resolve\FieldResolver::class))
81+
->newLazyGhost(static function (Resolve\FieldResolver $object) use ($container): void {
82+
$object->__construct(
83+
$container->get(Config::class),
84+
$container->get(Type\Entity\EntityTypeContainer::class),
85+
);
86+
});
7587
},
7688
)
7789
->set(
7890
Resolve\ResolveCollectionFactory::class,
79-
static function (Container $container) {
80-
return new Resolve\ResolveCollectionFactory(
81-
$container->get(EntityManager::class),
82-
$container->get(Config::class),
83-
$container->get(Resolve\FieldResolver::class),
84-
$container->get(Type\TypeContainer::class),
85-
$container->get(EntityTypeContainer::class),
86-
$container->get(EventDispatcher::class),
87-
$container->get('metadata'),
88-
);
91+
static function (Container $container): Resolve\ResolveCollectionFactory {
92+
return (new ReflectionClass(Resolve\ResolveCollectionFactory::class))
93+
->newLazyGhost(static function (Resolve\ResolveCollectionFactory $object) use ($container): void {
94+
$object->__construct(
95+
$container->get(EntityManager::class),
96+
$container->get(Config::class),
97+
$container->get(Resolve\FieldResolver::class),
98+
$container->get(Type\TypeContainer::class),
99+
$container->get(EntityTypeContainer::class),
100+
$container->get(EventDispatcher::class),
101+
$container->get('metadata'),
102+
);
103+
});
89104
},
90105
)
91106
->set(
92107
Resolve\ResolveEntityFactory::class,
93-
static function (Container $container) {
94-
return new Resolve\ResolveEntityFactory(
95-
$container->get(Config::class),
96-
$container->get(EntityManager::class),
97-
$container->get(EventDispatcher::class),
98-
$container->get('metadata'),
99-
);
108+
static function (Container $container): Resolve\ResolveEntityFactory {
109+
return (new ReflectionClass(Resolve\ResolveEntityFactory::class))
110+
->newLazyGhost(static function (Resolve\ResolveEntityFactory $object) use ($container): void {
111+
$object->__construct(
112+
$container->get(Config::class),
113+
$container->get(EntityManager::class),
114+
$container->get(EventDispatcher::class),
115+
$container->get('metadata'),
116+
);
117+
});
100118
},
101119
)
102120
->set(
103121
Filter\FilterFactory::class,
104-
static function (Container $container) {
105-
return new Filter\FilterFactory(
106-
$container->get(Config::class),
107-
$container->get(EntityManager::class),
108-
$container->get(Type\TypeContainer::class),
109-
$container->get(EventDispatcher::class),
110-
);
122+
static function (Container $container): Filter\FilterFactory {
123+
return (new ReflectionClass(Filter\FilterFactory::class))
124+
->newLazyGhost(static function (Filter\FilterFactory $object) use ($container): void {
125+
$object->__construct(
126+
$container->get(Config::class),
127+
$container->get(EntityManager::class),
128+
$container->get(Type\TypeContainer::class),
129+
$container->get(EventDispatcher::class),
130+
);
131+
});
111132
},
112133
)
113134
->set(
114135
Hydrator\HydratorContainer::class,
115-
static function (Container $container) {
116-
return new Hydrator\HydratorContainer(
117-
$container->get(EntityManager::class),
118-
$container->get(Type\Entity\EntityTypeContainer::class),
119-
);
136+
static function (Container $container): Hydrator\HydratorContainer {
137+
return (new ReflectionClass(Hydrator\HydratorContainer::class))
138+
->newLazyGhost(static function (Hydrator\HydratorContainer $object) use ($container): void {
139+
$object->__construct(
140+
$container->get(EntityManager::class),
141+
$container->get(Type\Entity\EntityTypeContainer::class),
142+
);
143+
});
120144
},
121145
)
122146
->set(
123147
Input\InputFactory::class,
124-
static function (Container $container) {
125-
return new Input\InputFactory(
126-
$container->get(Config::class),
127-
$container->get(EntityManager::class),
128-
$container->get(Type\Entity\EntityTypeContainer::class),
129-
$container->get(Type\TypeContainer::class),
130-
);
148+
static function (Container $container): Input\InputFactory {
149+
return (new ReflectionClass(Input\InputFactory::class))
150+
->newLazyGhost(static function (Input\InputFactory $object) use ($container): void {
151+
$object->__construct(
152+
$container->get(Config::class),
153+
$container->get(EntityManager::class),
154+
$container->get(Type\Entity\EntityTypeContainer::class),
155+
$container->get(Type\TypeContainer::class),
156+
);
157+
});
131158
},
132159
);
133160
}

0 commit comments

Comments
 (0)