Injects pro services – defaultní chování a best practices
- chikeet
- Člen | 160
Zdravím,
mám trochu zmatek v tom, jaké je defaultní chování ohledně injectů u services a jaké jsou v tomhle ohledu best practices.
Zajímá mě hlavně:
1. Pokud mám v configu:
services:
- App\MyService
je nutné mít u každé service, u které chci používat property injection, explicitně napsáno
services:
- App\MyService
inject: yes
? Je možné to nějak zapnout pro všechny services?
2. Doporučuje se mít property injection u služeb zapnuto, nebo ne? Proč?
Editoval chikeet (18. 3. 2015 19:18)
- bazo
- Člen | 620
defaultne je to vypnute aj sa to doporucuje. injecty su porusenie zapuzdrenia, ci inej akademickej veci. ale kazdopadne je lepsie si vsetko predavat cez construkto
pre vsetky services to zapnes, ak vsetky servicy implmenentuju napr rozhranie IService dajme tomu
decorator:
IService:
inject: yes
- chikeet
- Člen | 160
Za ten trik s rozhraním díky. Jen mi nejde do hlavy, jaký je reálný rozdíl mezi constructor a property injection (pokud pominu závislosti, které service z nějakého důvodu potřebuje už v konstruktoru). Zatím to vidím tak, že vypisovat všechny závislosti v konstruktoru je opruz, tak chci aspoň vědět, k čemu je to reálně dobré.
- David Kudera
- Člen | 455
Ještě je to lepší např. pro testy (když neberu ty akademický věci, ale jen praktický). Jde o to, že když je to v konstruktoru, tak se daná služba ani nevytvoří, když jí nedám vše, co potřebuje. U property injectování se ale vytvoří služba bez potřebných závislostí a musím jí je ručně předat a tam např. docela hodně hrozí, že něco zapomenu..... Nebo někdo jiný…