Jak na @inject do presenteru, když mám víc služeb/instancí jedné třídy

- Jakub Bouček
 - Člen | 54
 
Ahoj, v dokumentaci a ve zbytu fóra jsem nenašel, jak volat službu jejím jménem. Všude se jako identifikátor dává název třídy, ale já mám služby dělané jako více instancí jedné třídy.
Příklad:
services:
	imageStorage: \Jakubboucek\StorageRouter\Static(%storage.image.conf%)
	videoStorage: \Jakubboucek\StorageRouter\Static(%storage.video.conf%)
	invoiceStorage: \Jakubboucek\StorageRouter\Static(%storage.invoice.conf%)
Ale v presenteru pak potřebuju použít danou službu, drív to šlo přes
$this->getService('imageStorage');, ale nyní toto již není
možné, musí se přes DI, ale kromě
__construct(Static $configuredStorage), který není pro presenter
vhodný, se všude služba definuje názvem třídy:
    // 3) Předání do proměnné s anotací @inject:
    /** @inject @var \App\Service3 */
    public $service3;
Když použiju jako definici např.: invoiceStorage, tak to
nefunguje.
Připadám si jako začátečník, který není schopnej překonat úplně banální úkol.
Prosím, jak můžu injectovat konkrétní službu, aniž bych musel použít konstruktor a nebo pro každou definovat vlastní továrničku (což mi pozbývá smyslu, protože jsou to identické funkce, jen každá s jinými argumenty (jiná cesta a jiné klíče).

- David Grudl
 - Nette Core | 8285
 
getService() by fungovat mělo, nefunguje? Jinak konkrétní služby, které
potřebuješ předat do presenteru, můžeš uvést v konfigu, viz https://doc.nette.org/…dependencies#….
Pokud ti z nějakého důvodu nevyhovuje konstruktor, použij libovolnou jinou
metodu a zavolej ji v sekci setup v definici služby.

- Jakub Bouček
 - Člen | 54
 
David Grudl napsal(a):
getService() by fungovat mělo, nefunguje?
Nette\MemberAccessException: Call to undefined method App\Presenters\HomepagePresenter::getService(). in /var/www/hrackydomino.cz/vendor/nette/utils/src/Utils/ObjectMixin.php:100
Pokud ti z nějakého důvodu nevyhovuje konstruktor
Nevyhovuje mi protože pak BasePresenter nemá kompatibilní interface :-(
Jinak konkrétní služby, které potřebuješ předat do presenteru, můžeš uvést v konfigu, viz https://doc.nette.org/…dependencies#… (…) použij libovolnou jinou metodu a zavolej ji v sekci
setupv definici služby.
Jo to by šlo, díky. Sice už je to trochu drbání a hlavně musím dávat bacha, abych v BasePresenteru neměl stejnou setup funkci.

- Šaman
 - Člen | 2668
 
Jakub Bouček napsal(a):
David Grudl napsal(a):
getService() by fungovat mělo, nefunguje?
Nette\MemberAccessException: Call to undefined method App\Presenters\HomepagePresenter::getService(). in /var/www/hrackydomino.cz/vendor/nette/utils/src/Utils/ObjectMixin.php:100
To getService() volej na DI kontejneru, nikoliv na
presenteru.
Viz. https://api.nette.org/…ner.php.html#…

- Filip Procházka
 - Moderator | 4668
 
Udělal bych to raději přes konfiguraci
services:
	-
		class: App\MyCustomPresenter
		setup:
			- $service3(@invoiceStorage)