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
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á :)
- Šaman
- Člen | 2666
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.