Dědění služeb v konfiguraci DIC

- pepakriz
 - Člen | 246
 
Líbí se mi podpora dědičnosti služeb viz:
factories:
        securedForm < nette.basicForm:
                setup:
                        - addProtection()
Co takhle jí dotáhnout ještě dál a umožnit vytvářet tzv.
abstract služby (ten název jsem si právě vymyslel), které by
se do DIC negenerovaly, ale sloužili by pouze pro předkonfiguraci dalších
služeb? Představoval bych si to následovně:
factories:
	app.form:
		...
		setup:
                        - addProtection()
		abstract: true
		autowired: false
		...
        securedForm < app.form:
                class: ...
Přidal by se například parametr abstract, který říká, že
služba bude pouze šablonou pro dědění. Takováto služba by nevyžadovala
parametr class a negenerovala by se do DIC.
Dále by bylo super umožnit vícenásobné dědění, což nyní nefunguje.
factories:
	app.form:
		...
		setup:
                        - addProtection()
		abstract: true
		autowired: false
		...
	app.ajaxForm < app.form:
		setup:
			- "$service->getElementPrototype()->class[] = ?"("ajax")
		abstract: true
        app.myForm < app.ajaxForm:
                class: ...
Případně na to udělat novou sekci?
Co si o tom myslíte?

- Filip Procházka
 - Moderator | 4668
 
Předně, factories jsou docela mrtvé.
„Vícenásobné dědění“ v tvém podání by fungovat imho mělo. Vytvoříš test/pull request?
Co se týče abstraktních služeb, nemám pro ně využití. Stejně je
potřebuješ jenom pro, abys mohl nastavit společné volání setup. Daleko
lepší by bylo, kdyby se volalo inject*() i nad službami,
nejenom presenterem. Tahle myšlenka tu proběhla už dříve, ale nejsem si
jistý, jestli se na něco čeká, nebo byla zavrhnuta.

- pepakriz
 - Člen | 246
 
Viděl bych další využití. Sám používáš tag component
pro pozdější unifikaci. Nebylo by vhodnější na to použít právě
dědičnost nastavení?
Když o tom přemýšlím, možná by stačilo napsat jednoduchou extension. Každopádně na vícenásobnou dědičnost si pokusím najít čas a poslat pull.

- Patrik Votoček
 - Člen | 2221
 
HosipLan napsal(a):
… Daleko lepší by bylo, kdyby se volalo
inject*()i nad službami, nejenom presenterem …
tak pošli pulík ne?