Moznost pridat alias sluzby v konfiguraci

- xr
 - Člen | 94
 
Ahoj,
Je nejaka moznost pridat alias sluzby v konfiguracii?
Nieco taketo:
<?php
//neon
services:
	foo: My\Foo\Service
	# alias
	bar: @foo
?>
Vyssie uvedene je fajn a funguje, pokial nepouzivate dekoratory. Avsak pokial dekoratory pouzivate,
<?php
//neon
decorator:
	My\Foo\Service:
		setup:
			- callFooSetup
?>
metoda callFooSetup bude volana dvakrat,
pretoze vo vygenerovanom DI kontajneri createServiceBar interne
vola createServiceFoo, ale callFooSetup volanie sa
nachadza v oboch metodach.
To ma neziaduce ucinky. Je mozne nejako pridat alias sluzby bez DI rozsirenia a uprav v PHP kode Nette? Diky!
Existuje ContainerBuilder::addAlias metoda, ale je ju samozrejme
mozne volat len pocas vytvarania kontajneru v DI rozsireniach.

- David Grudl
 - Nette Core | 8285
 
Ano, bar: @foo není alias, ale vytvoření nové služby. Alias
lze přidat jen přes DI rozšíření.

- David Grudl
 - Nette Core | 8285
 
A k čemu je to užitečné? U těch extensions to existuje jen z důvodu zpětné kompatibility, ale proč to dělat v konfigu nevím.

- xr
 - Člen | 94
 
Robim nejaku magiu so sluzbami a potrebujem, aby pouzivali istu konvenciu nazvov. Zaroven vsak potrebujem, aby sa volali tak, ako boli povodne navrhnute (kvoli logickemu rozdeleniu). Je to zlozite na vysvetlenie.
Zjednodusene:
mam sluzbu logicky zaclenenu k nejakej casti aplikacie
moduleA.fooService, ale zaroven chcem na rovnaku sluzbu pristupit
aj pomocou featureA.fooService, inak povedane, sluzbu potrebujem
logicky zadelit do dalsej skupiny.
Chapem, ze je to okrajovy pripad.
Ak chces podotknut, ze aj tak nie je vhodne na sluzby pristupovat pomocou nazvu (vzhladom na princip DI), tak mas pravdu, ale potrebujem to z dovodu cyklickych zavislosti a poziadavku na „lazy loading“ sluzieb.

- xr
 - Člen | 94
 
Tak vytvoril som trivialne dedikovane DI rozsirenie, pre referenciu ho sem pastujem:
<?php
class AliasDiExtension extends Nette\DI\CompilerExtension
{
	public function loadConfiguration()
	{
		$builder = $this->getContainerBuilder();
		foreach ((array) $this->config as $alias => $serviceName) {
			$builder->addAlias($alias, $serviceName);
		}
	}
}
?>
Takto je mozne vytvorit v neone konf s aliasmi:
<?php
alias:
	bar:		foo
	myAlias:	myService
?>