DI v BasePresenteru jen pres @inject?

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

Zdravím,

mohu někoho požádat o vysvětlení, proč v BasePresenteru nelze předat objekt přes konstruktor ale musím jej injektnout takto přes anotaci?

/**
     * @var TaskEditFormControlFactory
     * @inject
     */
    public $taskEditFormControlFactory;

v jiných presenterech s tím nemám problém.

Moc díky, jen mě zajímá co mě uniká :)

CZechBoY
Člen | 3608
+
+2
-

Protože si v těch potomcích předáváš taky něco přes konstruktor a asi nevoláš konstruktor se závislostma BasePresenteru? Mně se líbí využití private+inject method v BasePresenteru.

Šaman
Člen | 2666
+
+3
-

Protože když upravíš konstruktor BasePresenteru ve větším projektu, musel bys upravit i případné konstruktory všech potomků. A někdy i ty mají další potomky. Někdo to označil za constructor hell. (Článek je starý, to, že má presenter mnoho nativních závislostí už neplatí, ale princip zůstává stejný.)

Takže v BasePresenterech je nejlepší injectovat anotací (nebo inject metodou), ve final presenterech můžeš použít i konstruktor.

MW
Člen | 626
+
0
-

Moc diky za vysvetleni.