Zum Inhalt springen

Verwendung von Dependency Injection

Erstellt am 31. Oktober 2011 · 2 Antworten · letzte Antwort am 2. November 2011

Tags: Frage

Unbekannter Benutzer ·

Laut Extbase-Dokumentation soll man ja Dependency Injection statt t3lib_div::makeInstance oder new verwenden.

Das bedeutet aber doch, dass die injizierten Klassen immer erstellt werden.

Ich habe eine Controller-Klasse, die in einer (!) Action über eine Service-Klasse eine Verbindung zu einer Datenbank auf einem anderen Server herstellt. Wenn ich in der Controller-Klasse eine Dependency Injection für diese Service-Klasse verwende, wird doch bei jedem Controller-Aufruf eine solche Datenbank-Verbindung aufgebaut - obwohl ich sie nur in der einen Action benötige - mit new oder makeInstance würde das nicht passieren.

Natürlich könnte ich die Datenbank-Verbindung nicht im Konstruktor der Service-Klasse, sondern später in den Datenbank-Abfragen aufbauen, aber damit ist der Sinn der Service-Klasse auch irgendwie dahin.

Die Dependency Injection scheint mir dafür unsinnig zu sein - wie sollte man vorgehen?

freshman17 · · Beste Antwort

Du kannst die DI mit den ObjectManager bewerkstelligen.

Beispiel:

config.tx_extbase {
  objects {
    Tx_MyExt_Domain_Repository_FooRepositoryInterface {
      className = Tx_MyExt2_Domain_Repository_BarRepository
    }
  }
}

in deiner Action:

$barRepository = $this->objectManager->get('Tx_MyExt_Domain_Repository_FooRepositoryInterface');