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