Files
michaelschiemer/docs/framework/di
..
2025-07-17 16:24:20 +02:00

Dependency Injection Modul

Übersicht

Das DI-Modul implementiert ein Dependency-Injection-Container-System, das die automatische Auflösung und Verwaltung von Abhängigkeiten ermöglicht.

Hauptkomponenten

Container

Der zentrale Service-Container, der Instanzen erstellt und verwaltet.

Hauptfunktionen:

  • Service-Erstellung und -Auflösung
  • Singleton-Verwaltung
  • Rekursive Abhängigkeitsauflösung

Initializer-Attribut

Das #[Initializer]-Attribut kennzeichnet Klassen, die Services im Container registrieren können.

Beispiel:

#[Initializer]
readonly class AnalyticsInitializer
{
    public function __invoke(Container $container): Analytics
    {
        // Service erstellen und konfigurieren
        return $analytics;
    }
}

Verwendung

Service definieren

// Service-Interface
interface MyServiceInterface
{
    public function doSomething(): void;
}

// Konkrete Implementierung
class MyService implements MyServiceInterface
{
    public function doSomething(): void
    {
        // Implementierung
    }
}

Service registrieren

#[Initializer]
class MyServiceInitializer
{
    public function __invoke(Container $container): MyServiceInterface
    {
        return new MyService();
    }
}

Service verwenden

class MyController
{
    public function __construct(
        private readonly MyServiceInterface $myService
    ) {}

    public function action(): void
    {
        $this->myService->doSomething();
    }
}

Prinzipien

  • Automatische Auflösung: Abhängigkeiten werden anhand von Typ-Hints automatisch aufgelöst
  • Lazy Loading: Services werden erst erstellt, wenn sie benötigt werden
  • Singleton-Modus: Standardmäßig werden Services als Singletons verwaltet