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

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

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

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

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.

vvoody
Člen | 910
+
0
-

HosipLan napsal(a):

Daleko lepší by bylo, kdyby se volalo inject*() i nad službami, nejenom presenterem.

+1

Keď sa táto featura zavádzala, myslel som že to bude aj pre služby.

Patrik Votoček
Člen | 2221
+
0
-

HosipLan napsal(a):

… Daleko lepší by bylo, kdyby se volalo inject*() i nad službami, nejenom presenterem …

tak pošli pulík ne?