Jak autowirenout pojmenovanou službu podle rodiče?

- CZechBoY
 - Člen | 3608
 
Zdravím,
mám dva typy modelů a k nim dva typy databáze – datová a webová.
Aktuálně mám víc modelů používajících datovou databázi takže mám
nastavený autowire na dataovou databázi. V případě webových modelů si
ručně předávám službu:
services:
  - NS\MyWebModel(@database.webConn.context) # model s pristupem do webove db
  - NS\MyDataModel # model s pristupem do datove db
Tyto modely se také liší tím, že dědí od BaseModel, resp. BaseWebModel.
Lze tedy nějak (jak?) pomocí rodiče určit jaká služba (databáze) se
má použít?
Díky

- David Matějka
 - Moderator | 6445
 
Nyni to neni mozne, musel by sis napsat vlastni extension. Ale asi by nebyl
problem pridat podporu do dekoratoru,
aby se nechaly uvest arguments, takze by zapis mohl vypadat treba
takhle:
decorator:
	BaseWebModel:
		arguments: [connection: @database.webConn.context]
				
- CZechBoY
 - Člen | 3608
 
@DavidMatějka: buď jsem to nepochopil, nebo špatně přepsal :(
decorator:
    NS\BaseWebModel:
        arguments: [db: @database.webConn.context]
Takhle to je dobře nebo špatně?
Dostávám exception
Nette\InvalidStateException
Unknown configuration option decorator.NS\BaseWebModel.arguments.
Editoval CZechBoY (13. 10. 2015 17:45)

- David Matějka
 - Moderator | 6445
 
precti si ten prispevek znovu :) pisu, ze to zatim neni mozne, ale ze by asi nebyl problem pridat podporu do dekoratoru

- newPOPE
 - Člen | 648
 
@CZechBoY
// config.neon
- FirstDbContext(...)
- SecondDbContext(...)
- FooService
- BarService
// Db context childs
class FirstDbContext extends \Nette\Db\Context {}
class SecondDbContext extends \Nette\Db\Context {}
// FooService
public function __construct (FirstDbContext) {...}
// BarService
public function __construct (SecondDbContext) {...}
				
- CZechBoY
 - Člen | 3608
 
@newPOPE Myslim, že jsem něco přehlídl :-)). Díky za ukázku, už
jsem to pochopil jak to myslíš.
Akorát jsem si uvědomil, že to asi nebude potřeba …
Webový modely maj v konstruktoru přímo DB\Context, datové modely mají
DbResolver, který jim databázi dodá až potom, co bude vědět
kterou dodat.
Nastavil jsem teda webovou databázi jako autowired=true, datové databáze mají autowired=false.
Při druhé (nechápu proč ne při první) službě využívající Db\Context mi Nette vyhodí BSOD, že nemůže najít Db\Context službu.
Neví někdo čím by to mohlo být?
database:
	webConn:
		dsn: ...
		user: ...
		password: ...
		autowired: true
					Editoval CZechBoY (24. 11. 2015 13:07)