DI Kontejner – příklad z dokumentace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
bluray
Člen | 178
+
0
-

Dobrý den, v tomto článku je následující příklad:
Definice služby:

services:
    database:
        class: Nette\Database\Connection
        create: DbFactory::createConnection

DbFactory::createConnection:

class DbFactory
{
    static function createConnection(Nette\DI\Container $container)
    {
        ...
    }
}

Vygeneruje:

function createServiceDatabase()
{
    return DbFactory::createConnection($this);
}

Má metoda DbFactory::createConnection() nějaký praktický význam? Jak by byla uvnitř implementována?
Proč jí musím zadávat Container?

V příkladu výše je toto:

services:
    database: Nette\Database\Connection(%dsn%, %user%, %password%)

To mi vytvoří Connection samo a nemusím se o nic starat. Jak jsem pochopil, v metodě createConnection budu muset nějak vytvořit sám…

Díky za radu

David Matějka
Moderator | 6445
+
0
-

To v dokumentaci jsou pouze priklady, jak se mohou zapisovat sluzby. Proste ze si muzes napsat factory, ktera vytvori instanci urcity sluzby.

Pripojeni k databazi bys stejne takto vytvaret nemel, od toho je database extension a konfigurace v neonu

bluray
Člen | 178
+
0
-

Díky za odpověď. Doted jsem služby vytvářel pouze v neonu, ale má nějaký smysl vytvářet to továrničkou? Výsledek je stejný a je s tím více psaního…

David Matějka
Moderator | 6445
+
0
-

Ma to smysl, pokud je vytvareni sluzby slozitejsi, prikladem je RouterFactory v sandboxu, ktery vytvari router