Jak do DIC injektovat vlastní službu aby fungoval autowiring
- Taco
- Člen | 50
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
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 | 50
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
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