Registrace služby: NEON vs. addService

bortomar
Člen | 7
+
0
-

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

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

Mockrát děkuji za odpověď. Registraci v neonu použít pochopitelně můžu, ale jsem zvědavej, jak Nette funguje. Je to asi nějaká moje obsese, když mám něco používat, chtěl bych vědět, jak to asi funguje. :)

bortomar
Člen | 7
+
0
-

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?

bortomar
Člen | 7
+
+1
-

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)