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?