DI – zavislost rozsireni pre kompiler

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

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
+
0
-

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)

Morlok
Člen | 26
+
0
-

Diki za vysvetlenie, s tymato vlastnostami si uplne vystacim. Krasa!

Filip Procházka
Moderator | 4668
+
0
-

Příště směřuj prvně do dokumentace, kde je tohle vysvětleno ;)