Nepřímo závislý doplňek na jiných

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

Jak korektně řešit závislosti jednoho doplňku na druhém? Např. chci aby měl v mém doplňku možnost využít FB a k tomu abych jej mohl použít bude doplněk potřebovat Kdyby\Facebook. Ale bude to volitelné přes config. Pokud si programátor nastaví „enableFB“ aby to provedlo kontrolu zda je k dispozici extension pro facebook.

Udělat do afterCompile kontrolu zda je požadováno aby se používal FB a tak si udělat kontrolu všech extension zda je mezi nimi Kdyby\Facebook?

Dále si je pak do služby předat přes konstruktor? Vložit jim defaultní hodnotu NULL pro případ že služba nebude k dispozici? Nebo přes nějaký setter či inject?

Aby to byla nějaká uni definice bych chtěl asi moc že? ;) Myšleno tak že doplněk bude chtít FB a je na programátorovi jaký doplněk na FB použije, zda od Filipa Kdyby\Facebook či něco vlastního nebo od někoho jiného?

Filip Procházka
Moderator | 4668
+
0
-

Kdybys měl definovaný nějaký obecný interface, tak by dávalo smysl povolit použití něčeho, co tenhle interface implementuje, tedy několik možných doplňků například. Jenže takový interface neexistuje :)

Dává mi tedy smysl mít autodetekci, jestli je v compileru připojen například FacebookExtension a když bude připojen tak automaticky funkcionalitu povolit.

Normálně v loadConfiguration bych si zavolal třeba

if ($this->compiler->getExtensions('Kdyby\Facebook\DI\FacebookExtension')) {
	// existuje, tak nakonfigurovat
}

A dál už je to hračka, ne? :)

akadlec
Člen | 1326
+
0
-

jj s tím interface mě to napadlo, ono udělat ho by snad ani nebyl problém, ale zase by jej museli implementovat vývojáři konkrétních doplňku a to by asi problém byl ;)

Já bych to raději udělal opačně, resp. on ten doplněk bude fungovat normálně bez FB a je až na vývojáři zda jej bude chtít použít či nikoliv a pokud jej použije a nepřipojí FB extension tak aby to na něj zařvalo že na něco zapomněl ;)