getByType má v Nette 3 rozdílné chování od Nette 2.4?

brabo
Člen | 19
+
0
-

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 | 8227
+
+1
-

Máš v konfigu export > types, tak to prosím smaž. https://doc.nette.org/cs/configuring#…