🏗️ Lehrpfad 2: Modernes OOP, Records & Interfaces

C# 08: Interfaces & Dependency Injection

Baue testbare Enterprise-Architekturen: Entkopplung durch Schnittstellen und der native .NET Dependency Injection Container (Service Lifetimes).

📂 Dateien dieser Lerneinheit:
📄 Aufgabe.cs (Startercode) 🧪 TestAufgabe.cs (Tests) 💡 Musterloesung.cs (Lösung) 📖 README.md

💡 1. Interfaces & Service Lifetimes in .NET

Klassen fordern ihre Abhängigkeiten im Konstruktor an (Inversion of Control). Der .NET DI-Container kümmert sich um die Erzeugung und Lebenszeit:

public interface INotificationService {
    Task SendAsync(string recipient, string message);
}

public class EmailNotificationService : INotificationService {
    public async Task SendAsync(string recipient, string message) {
        Console.WriteLine($"[Email an {recipient}]: {message}");
        await Task.CompletedTask;
    }
}

// Service, der über DI entkoppelt ist:
public class OrderService(INotificationService notifier) {
    public async Task CompleteOrderAsync(int orderId, string customerEmail) {
        // ... Bestellogik ...
        await notifier.SendAsync(customerEmail, $"Bestellung {orderId} bestätigt!");
    }
}
🔌 Didaktische Analogie: Der Stecker-Standard

Ein USB-C-Kabel fragt nicht, ob am anderen Ende ein Samsung, Apple oder eine Festplatte hängt. Das Interface garantiert die Buchse – die konkrete Implementierung steckst du zur Laufzeit ein!

⚡ 2. Quick-Cheat-Sheet

DI LifetimeMethodeWann wird instanziiert?
TransientAddTransient()Jedes Mal neu, wenn angefordert (flüchtig)
ScopedAddScoped()Einmal pro Web-Request / Scope (Standard in Web-APIs)
SingletonAddSingleton()Genau einmal für die gesamte Anwendungslebensdauer

⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)

⚠️ Captive Dependencies

Registriert man einen Singleton-Service, der einen Scoped-Service im Konstruktor injiziert, wird der Scoped-Service fälschlicherweise zum Singleton eingefroren!

⚠️ Direktes 'new' im Service

Schreibt man im Service var repo = new SqlRepository();, hebelt man Dependency Injection aus und macht Unit-Testing unmöglich.

🧠 4. Diagnostischer Selbst-Check

Überprüfe dein Verständnis von Sprach-Features, Speicherverwaltung und Enterprise-Architektur, bevor du den Code in der Web-IDE schreibst.

🎯 5. Aufgaben & Checkliste in Aufgabe.cs

💻 In Web-IDE öffnen & lösen →