Rozšířené možnosti autowiringu
- David Grudl
- Nette Core | 8227
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
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)
- Kori
- Člen | 73
David Matějka napsal(a):
a jakou situaci to řeší.
treba tohle:
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
services
- A
-
class: B
autowired: [B]
- MyFactory
- MySecondFactory
- MyAnotherFactory