getByType má v Nette 3 rozdílné chování od Nette 2.4?
- brabo
- Člen | 19
Snažím se převést projekt z Nette 2.4 na Nette 3 a narazil jsem na rozdílné chování metody getByType() nad kontejnerem.
Dřív to bez problémů našlo jakoukoli registrovanou službu dle názvu třídy. Teď to vrací chybu, že taková služba neexistuje.
Zkoušel jsem to přímo na triviálním příkladu z dokumentace:
services:
- PDO('sqlite::memory:')
$database = $container->getByType(\PDO::class);
Výsledek:
Nette\DI\MissingServiceException: Service of type PDO not found.
Ono už při pohledu do zkompilovaného kontejneru v temp adresáři se obsah dost zásadně ve verzi 2.4 a 3 liší.
Co jsem dotrasoval, tak ve verzi 3 metoda getByType() hledá v poli
$this->wiring. Která ve zkompilované třídě kontejneru obsahuje ale jen
presentery. Pro tu PDO třídu tam vznikla metoda
public function createService01(): PDO
, která se ale nikde
nevolá.
Jak mám v Nette 3 dosáhnout toho, že vím přesně jakou třídu z kontejneru potřebuju dynamicky získat, ale neznám její pojmenování?
- David Grudl
- Nette Core | 8201
Máš v konfigu export > types, tak to prosím smaž. https://doc.nette.org/cs/configuring#…