CompilerExtension problém Slepice&Vejce
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- nanuqcz
 - Člen | 822
 
Ahoj,
chci udělat CompilerExtension rozšíření, které:
- se připojí k DB, vytáhne z tama nějaká data, a na základě nich přidá do DI/Containeru nějaké služby;
 - koukne, jestli je určitá služba již registrována, pokud ne, registruje vlastní.
 
Chápu, že pokud ještě Container není vytvořený, nemůžu z něho tahat služby (např. připojení k DB). A že pokud už vytvořený a nakešovaný je (takže služby tahat můžu), zase do něj nemůžu nic přidat.
Něco mi ale říká, že řešení existuje (i když možná ne 100% čisté), jen na něho nemůžu přijít. Poradíte, jak na to? :-)
Díky.
P.S. Hlavní problémy teda podle mě jsou:
- Jak v metodě 
loadConfiguration()čibeforeCompile()získat- službu 
nette.database.default, - nebo aspoň její přihlašovací údaje k DB?
 
 - službu 
 - Jak v metodě 
loadConfiguration()čibeforeCompile()zkontrolovat, jestli již daná služba (na základě názvu služby, nebo implementované třídy, je mi to jedno) existuje? 

- Zax
 - Člen | 370
 
- Minimálně parametry by měly jít normálně předat konstruktorem přímo do extension, Nette si takhle běžně předává temp dir. Aspoň ty přihlašovací údaje si předáš a connection vyrobíš ručně když už nic jinýho ;-)
 - $builder->findByType() – v loadConfiguration vrací služby, které sis zrovna zaregistroval v aktuálním rozšíření, v beforeCompile vrací všechny služby.
 
Snad jsem nic nepopletl.