Injects pro services – defaultní chování a best practices

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

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
+
+2
-

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
+
0
-

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é.

bazo
Člen | 620
+
0
-

najvacsia vyhoda je ze ti to DI container sam doplni a hned je vidno ake zavislosti trieda ma. a opruz to nie je lebo kazde IDE ma skratku na genrovanie constructoru. v netbeans alt+insert

chikeet
Člen | 160
+
0
-

Díky moc za tu zkratku! Když to nemusím ručně vypisovat, nemám s tím už žádný problém :-)

David Kudera
Člen | 455
+
0
-

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ý…

chikeet
Člen | 160
+
0
-

@DavidKudera Díky, to mi dává smysl. Zatím v praxi moc netestuju (jen jeden projekt mám částečně pokrytý Seleniem), ale hodlám co nejdřív začít, takže přesně tenhle druh informací potřebuju slyšet.