Registrace služby: NEON vs. addService
- bortomar
- Člen | 7
Zdravím, jakožto zvídavého začátečníka by mě zajímalo, jak je
možné zaregistrovat službu bez použití konfiguračního souboru
(config.neon) tak, aby fungoval autowiring, protože když např. v bootstrapu
zaregistruji službu prostřednictvím metody Container::addService, služba se
mi při dumpnutí containeru objevuje v registry property, ale nikoliv
v services a nefunguje ani zmíněný autowiring, kdy se do konstruktoru
snažím službu předat. Při použití konfiguračního souboru vše funguje
dle očekávání.
Díky za odpověď.
Editoval bortomar (22. 9. 2018 8:56)
- David Matějka
- Moderator | 6445
ahoj, sluzbu je vzdy nutne registrovat v configu (nebo v compiler extension), jelikoz autowiring se provadi pri kompilaci DI kontejneru a v te fazi nemuze znat sluzby pridane pres addService.
proc nemuzes pouzit registraci v neonu? pokud ti jde pouze o to, ze znas definici sluzby, ale z nejakeho duvodu chces jeji instanci vytvaret v bootstrapu, muzes vyuzit tzv dynamickou sluzbu. to funguje tak, ze do neonu zapises:
services:
myService:
class: App\MyService
dynamic: true
a v bootstrapu pak zavolas
$container->addService('myService', $myService)
- bortomar
- Člen | 7
bortomar napsal(a):
Ještě mě napadlo, že lze přidat službu i prostřednictvím Configurator::addServices, což je ještě před samotnou kompilací, ale ani v tomto případě autowiring nefunguje. Nebo se pletu?
Už tomu rozumím. Služby přidané přes Configurator::addServices se do do Containeru přidávají teprve po jeho vygenerování (https://api.nette.org/…tor.php.html#…), takže je to v podstatě totožné, jako bych použil Container::addService.
Editoval bortomar (22. 9. 2018 19:34)