Rozšířené možnosti autowiringu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8227
+
+19
-

Ve verzi 2.4 se rozšíří možnosti autowiringu v DI, aby bylo možné elegantně obejít některé komplikace, které se mohou v praxi vyskytnout. Zkoušel jsem několik přístupů a tento je nejnovější:

  • volba autowiring může kromě true a false být i název třídy/rozhraní případně pole tříd/rozhraní
  • což dovoluje omezit, kde všude bude službu přes autowiring nabízena
  • tj. bude nabízena jen pro vyjmenované třídy: pokud type hint argumentu odpovídá alespoň jednomu z uvedených typu, služba bude nabízena
  • takže pokud uvedete přímo název třídy oné služby (nebo autowired: self), služba bude nabízena jen tehdy, pokud si type hint vyžádá přímo její třídu
  • a zároveň: služby takto anotované budou preferované před ostatními, které mají jen normální autowiring (tj. true)

Otestovat můžete zde https://github.com/…e/di/pull/84#…, diskutovat tam nebo tady.

Pokud jste narazili na nějaký limit autowiringu, pojďte otestovat, jestli ho tento přístup ho řeší.

Tomáš Votruba
Moderator | 1114
+
+2
-

Pro mě by byl čitelnější nějaký příklad třeba v neon, který by ukázal, co se kdy a jak má nově chovat a jakou situaci to řeší.

Editoval Tomáš Votruba (8. 5. 2016 17:13)

David Matějka
Moderator | 6445
+
0
-

a jakou situaci to řeší.

treba tohle:

https://forum.nette.org/…-same-parent

Kori
Člen | 73
+
0
-

David Matějka napsal(a):

a jakou situaci to řeší.

treba tohle:

https://forum.nette.org/…-same-parent

Muzes, prosim te, nastinit, jak by tedy ted nove vypadala konfigurace pro tento pripad, bez toho, aniz bych musel explicitne uvadet, kam chci jakou sluzbu injectovat? Diky.

class B extends A {

}

services
 - A
 - B
 - MyFactory
 - MySecondFactory
 - MyAnotherFactory

class MyFactory(B $b) {

}

class MySecondFactory(A $a) {

}

class MyAnotherFactory(B $b) {

}
David Matějka
Moderator | 6445
+
+2
-
services
	- A
	-
		class: B
		autowired: [B]
	- MyFactory
	- MySecondFactory
	- MyAnotherFactory
Eda
Backer | 220
+
+3
-

Tohle je naprosto boží a dost mi to reálně pomůže! Kvůli multiple services of type… totiž musím dosud dost věcí řešit pomocí názvů služeb a jejich explicitním předáváním, což nyní odpadne. Díky.