predavanie $container serviceom bez factory
- bazo
- Člen | 620
ahojte, neviem ci to je blbost ale mne sa to zda celkom ok, aby sa serviceom,
ktore nemaju definovanu factory predaval do konstruktoru automaticky
$container
teda namiesto
<?php
$container->addService('Sluzba', function($container) {
$class = 'Sluzba'; $service = new $class();
return $service;
}, NULL);
?>
by to bolo
<?php
$container->addService('Sluzba', function($container) {
$class = 'Sluzba'; $service = new $class($container);
return $service;
}, NULL);
?>
co myslite?
- Petr Motejlek
- Člen | 293
@bazo: Automaticky rozhodně ne. To bys pak zbytečně po všech třídách, co chceš mít jako službu, musel požadovat, aby s Nette DI počítaly, a to je úplně proti filozofii DI. Hezčí a srozumitelnější bude, když si uděláš vlastní továrnu. Do továrny se IContainer automaticky předává.
- Filip Procházka
- Moderator | 4668
Ale ty přece nemáš předávat Container. Máš předávat několik služeb
třídě. Víc nemá potřebovat. Pokud ti to nevyhovuje, vrať se
k Nette\Environment::getService()
- Ondřej Mirtes
- Člen | 1536
Pokud vím, tak Nette DI kontejner podporuje továrničky v podobě anonymních funkcí.
Puristické řešení podle nejlepších teoretických úmyslů™ je mít
pro každou servisu, kterou chceme instanciovat přes továrničku, mít ještě
samostatný objekt s příponou Factory
. Snadno se to pak
konfiguruje.