Jak do DIC injektovat vlastní službu aby fungoval autowiring

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Taco
Člen | 46
+
0
-

Vytvářím si DIC. A chtěl bych do něj, do toho kontaineru zaregistrovat již existující službu (existující instanci) tak, aby se mohla autowiringem přiřazovala do DIC vytvářených služeb. Z určitých důvodů ji nemohu vytvářet DIC samím (zkoušel jsem to).

Zkoušel jsem toto:

	$configurator = new Nette\Configurator;
	$configurator->addServices(['xyz' => $myservice]);
	$container = $configurator->createContainer();

Ta služba se tam sice objeví, ale autowiring ji zdá se ignoruje.

$container->getService('xyz') funguje, ale getByType() nikoliv.

Díky za rady.

Azathoth
Člen | 495
+
-1
-

A proč nemůžeš vytvářet tu službu normálně? A co takhle si ji vytvořit nějakou továrnou? Jako se vytváří Router.
Podle mne by bylo lepší vyřešit, jak nechat DIC, aby vytvořil tu službu.
A když si tu instanci uložíš do nějaké továrny a zaregistruješ tu továrnu, aby ti tu službu „vytvořila“ (ale v reálu vrátila tu už vytvořenou instance), tak by to nešlo?

Editoval Azathoth (6. 9. 2015 14:09)

Taco
Člen | 46
+
0
-

Nemůžu tu službu vytvářet normálně, protože ta služba poskytuje data díky Nettímu DIC. Tedy aplikace používá implementaci, která využívá Nette DIC. Ne naopak.

Tu továrnu furt nemůžu trefit, aby to fungovalo.

Taky se mi nechce vytvářet wraper, jen kůli tomu, abych to přečůral. Ale když to jinak nepůjde…

David Matějka
Moderator | 6445
+
+2
-

Muzes pouzit dynamickou sluzbu, viz test: https://github.com/…dynamic.phpt. Staci u ni v configu nastavit klic dynamic na true a pak pres addService pridat instanci s nazvem sluzby, cos uved v configu

Taco
Člen | 46
+
0
-

Tohle je přesně ono. Díky moc!