Aliasy v Dependency Injection Containeru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Filip Procházka
Moderator | 4668
+
0
-

Líbilo by se mi něco jako

services:
   foo: @bar

a

$container->addDefinition('foo')->setFactory('@bar');

výsledkem by bylo zkompilované

protected function createServiceFoo()
{
	return $this->getService('bar');
}

Mám zkusit poslat pull Davide, nebo tuhle funkcionalitu vůbec nechceš?

David Grudl
Nette Core | 7790
+
0
-

Zatím se mi vždycky ukázalo, že jsem alias potřeboval jen záplatu na špatný návrh, tedy něco, co šlo řešit jinak a hlavně lépe. Takže zatím podporované nejsou. Klidně je přidám, ale zajímal by měl use case, kde jsou smysluplné.

Filip Procházka
Moderator | 4668
+
0
-

Asi máš pravdu a je to špatným návrhem.
To co mě tady teď pálí snad půjde nějak přepsat bez aliasů, ale bude to bolet :)

David Grudl
Nette Core | 7790
+
0
-

Přepisování je pakárna. Ale když tam aliasy nebudou, nebude je nikdo mít tendenci používat.

(BTW, čistě mezi námi, alias velmi jednoduše zapsat jde, napovím …

Patrik Votoček
Člen | 2221
+
0
-

Spíš: @container::getS... ne? :-)

Filip Procházka
Moderator | 4668
+
0
-

Díky, to mě taky napadlo, ale říkal jsem si, že to nebude nejčistější :)

David Grudl
Nette Core | 7790
+
0
-

Patrik Votoček napsal(a):

Spíš:

No jasně, píšu po ránu kraviny ;-)

A je to zcela čistý způsob.

Filip Procházka
Moderator | 4668
+
0
-

Napadlo mě jenom to „create“ a to se mi moc nelíbilo, ale „get“ se mi líbí :)

Chtěl jsem se obejít bez těch aliasů, ale v tomhle případě se to prostě nehodí.

Chci mít možnost konfiguratovat více připojení pro doctrine a více EntityManagerů. Prefixuju si je podle jména doctrine_orm_<name>EntityManager a stejně tak připojení doctrine_dbal_<name>Connection.

Výchozí (hlavní) připojení a stejně tak výchozí EntityManager má pak alias doctrine_orm_entityManager a doctrine_orm_connection, kvůli jiným službám.

Docela mi vyhovují ty „get“ továrničky, připomíná mi to, že by tak být spíš nemělo :)