DI – zavislost rozsireni pre kompiler
- Morlok
- Člen | 26
Rozmyslal som, ze ci by nebolo dobre do Nette dopracovat nieco ako „zavyslost“ rozsireni compileru. Napr. potrebujem si registrovat extension (MyExtension), ktore bude rozsirovat sluzby vytvorene cez NetteExtension, CusomExtension a ine, ale ak som ho registroval pred CustomExtension nebudu definicie sluzieb najdene co sposoby chybu.
Ano, staci prehodit extensions v spravnom poradi, ale ked je tychto rozsireni vela (napr v modularnej aplikacii) je to pomerne narocne ak vobec mozne(cisto). Riesenim by bolo napr. mat v rozsireni metodu „getRequiredExtensions()“ a ak by nieco vracala, compiler by spracoval najskor tieto rozsirenia.
Editoval Morlok (11. 6. 2012 11:28)
- Filip Procházka
- Moderator | 4668
Prozradím ti tajemství: ono je to úplně jedno!
Odkazuješ se na služby pomocí @jina.sluzba
a tohle se
nezpracovává až do momentu kompilace, tedy když dodržíš pravidla
- v loadConfiguration() se služby pouze přidávají, nastavují se jim argumenty a metody
- v beforeCompile() se služby nepřidávají, ale propojují se (můžeš prohledávat registrované služby a vytvářet dynamicky vazby, například na základě tagů, nebo interfaců). Zde se nové služby už nevytváří!
- v afterCompile() už jen hackuješ výsledný zkompilovaný container
tak žádné závislosti nepotřebuješ! Dobré že? Nauč se psát tak, aby to na pořadí nezáviselo ;)
PS: Snad jedině Composer.
Editoval HosipLan (11. 6. 2012 11:52)