# 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:**
```php
#[Initializer]
readonly class AnalyticsInitializer
{
    public function __invoke(Container $container): Analytics
    {
        // Service erstellen und konfigurieren
        return $analytics;
    }
}
```

## Verwendung

### Service definieren

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

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

### Service registrieren

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

### Service verwenden

```php
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
