Jak přidat jednu službu poděděnému modelu?

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

Zdravím,
mám BaseModel, který má v konstruktoru specifikované základní služby (db, cache, session atd.). Ostatní modely od něj dědí abych to nemusel pořád opakovat, ale nevím jak to udělat když chci přidat další službu do poděděného ExtendedModelu. Tedy potřebuji v něm například db, cache, session + třeba authenticator. Když přepíšu konstruktor, tak si musím opět předat všechny služby do ExtendedModelu a to je teda zbytečné nějaký BaseModel mít. :/
Nejde ta jedna služba tedy nějak elegantně injektovat jako do presenterů?

Šaman
Člen | 2666
+
0
-

Vždyť to předávání služeb řeší autoWire, ne? A pokud ten ExtendedModel vytváříš ručně, stejně mu musíš předat i base závislosti.

ViPEr*CZ*
Člen | 817
+
0
-

No já spíš myslím, že dotyčnému vadí přepisovat co už jednou má napsaný. Autowire nevyřeší to, že musím napsat skoro stejný konstruktor. Ale chytřejší IDE to vcelku řeší, vygeneruje konstruktor s parent voláním a předá vše potřebné. Pak stačí jen rozšiřovat. I když teda model by zrovna nemusel vědět nic o zmíněných službách.

Šaman
Člen | 2666
+
0
-

Jinak inject* metody nejsou nic víc než setter, který se nastavuje automaticky pomocí autoWire. Pokud ti nevadí, že v modelu nebude AW fungovat a budeš si muset v configu tu metodu zavolat ručně, tak samozřejmě můžeš dál používat i settery (klidně pojmenované inject*). Já to tak nějakou dobu dělal, než jsem si zvykl na konstruktory.