Nové nové nové DI – pár myšlenek k pluginům

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Filip Procházka
Moderator | 4668
+
0
-

Řeším plugin systém. Takže pár mých myšlenek:

Mám něco co připomíná „balíček“, takový balíček obsahuje nějaké modely, služby, komponenty, atd. Vzniká mi ale problém s konfigurací

  • Můžu ručně sepsat služby do configu, když komponenty integruji. Tohle je sice funkční, ale nemám šanci si nechat nadrátovat služby pomocí autowire, nebo vyhledat služby podle typu, které jsou už v Nette\Configurator (a mém poděděném). To se dá částečně řešit „manuálně“ (klasicky výčtem @sluzba).
  • Co by bylo lepší, tak mít konfiguraci zvlášť, nějakou výchozí pro balík, nebo tak. Tady ale vyvstane problém, že musím načítat další config a nemám šanci se dostat k tagům, nebo si zjistit služby určitého interface, protože se vytvoří nový ContainerBuilder.
  • Co by bylo úplně super, tak mít konfiguraci dynamicky v databázi. Tohle je u mě víceméně nutnost. Dělám CMSko a potřebuju nějak skládat nastavovat přes UI a později to načítat.
  • Jak to dělá VenneCMS, tak config generovat dynamicky? Uložit si specifika do databáze a pak z toho generovat config, ten načítat a Nette se postará o generování PHPka. To se mi zdá teď jako nejlepší.

Kdyby někdo měl nějaký nápad…


Bylo by super, kdyby se někam cachoval index třída => služba, aby se v něm dalo hledat a nemusely se služby vytvářet. Blbý je to u služeb vytvářených callbackem/továrnou.

Potřeboval bych nějak zapsat svoje služby a mít možnost překrýt/upravit Nette služby. Nechci mít služby mého frameworku v configu aplikace, to by šíleně nabobtnalo. Vyhovuje mi to zapisovat do poděděného Configuratoru, ale zase mě strašně štve, že ContainerBuilder bude ignorovat rozhraní těch služeb, protože je nemá jak zjistit.

Dalo by se to částečně řešit tak, že když továrna není closura, mohla by se kontrolovat annotace @return? Podle mě by to úplně stačilo. Nebo to naučit číst nějakou novou annotaci, pokud by return bylo nevyhovujíci @service class (nemusí se kontrolovat use na začátku souboru?).


A co by bylo nejvíc super, kdyby nám David hodil nějakou kost a mohli jsme aspoň žhavit hlavy, nebo pomoct s nečím, byť by to byly jenom další špatné implementace. Aspoň by nebyl čas remcat :)

mkoubik
Člen | 728
+
0
-

Možná to bude OT, ale řešil jste někdo načítání konfigurace z víc .neon souborů? Něco jako mergeování výsledných struktur, nebo include v NEONu? Hodilo by se mi to právě na definování balíků služeb v extra souborech, nebo na konfiguraci db v neverzovaném souboru. Mimo jiné by to šlo použít i pro ty pluginy.

Filip Procházka
Moderator | 4668
+
0
-

Něco jsem měl kdysi rozdělané a funkční, ale nějak se mi (v současnosti) nelíbí myšlenka mít více configů.

nanuqcz
Člen | 822
+
0
-

mkoubik: řešil, výsledek je zde, ale nijak do hloubky jsem to netestoval.

Pro mé použití to ale jelo bezchybně ;-)

pepakriz
Člen | 246
+
0
-

xxxObiWan napsal(a):

Pro mé použití to ale jelo bezchybně ;-)

Za předpokladu, že druhý soubor nepřepisuje hodnoty z prvního souboru. Hodilo by se rozdělení metody LoadConfig na dvě. Jedna by připravila pole hodnot, druhá by připravila prostředí.

Lopo
Člen | 277
+
0
-

ja mam nacitavanie viacerych konfigov pomocou merge+prepisu implementovane v Lohini …