Dependency Injection

Prof. Dr. Robin Nunkesser

Agentisches Beispiel: Dependency Injection

Verwendete Instructions

  • .github/copilot-instructions.md
  • .github/instructions/artifacts.instructions.md
  • .github/instructions/artifacts-consumers-education.instructions.md
  • .github/instructions/slides.instructions.md

Exakter Prompt

Erstelle ein agent-generated example für Dependency Injection (MAUI, fortgeschrittene Studierende).
Feature-Scope: minimal. Wende MVVM mit CommunityToolkit.Mvvm und Unit Tests mit MSTest an.
Entscheide anhand der Architektur-Entscheidungstabelle aus den Instructions, welche weiteren Muster (Core-Projekt, Architekturschichten) das Konzept rechtfertigt — verwende sie, wenn dieselbe Komplexität in einem produktiven Einsatz diese Strukturen erfordern würde.
Lies zuerst die Instructions, ermittle den Foliensatz, dokumentiere Instructions + Prompt dort, vergleiche mit manuellem Beispiel, verifiziere MacCatalyst Build mit workaround zum mismatch des workloads mit der xcode version.

Architekturentscheidung (gemäß Tabelle)

Aspekt Entscheidung Begründung
Feature-Scope Minimal (eine Nachricht senden) Fokus bleibt auf DI-Mechanik
MVVM Ja Datenbindung + Command als sichtbares Muster
Unit Tests Ja (MSTest) ViewModel-Verhalten ist ohne UI testbar
Core-Projekt + Interfaces Nein Keine Persistenz/Netzwerkdomäne im Scope
Architekturschichten Nein Für diese Komplexität nicht erforderlich

Ergebnis (agent-generated)

  • DependencyInjection.ViewModels mit MainViewModel und IMessageWriter
  • CommunityToolkit.Mvvm ([ObservableProperty], [RelayCommand])
  • Writer-Implementierungen (ConsoleMessageWriter, DebugMessageWriter, NoMessageWriter) per DI im MauiProgram
  • DependencyInjection.Tests (MSTest) mit 3 Tests für Command, CanExecute und Lifecycle
  • MacCatalyst-Workaround gesetzt: ValidateXcodeVersion=false, SupportedOSPlatformVersion=15.0

Vergleich: manuell vs. agent-generated

Kriterium Manuelles Beispiel Agent-generated Beispiel
ViewModel leeres MainViewModel testbares MainViewModel mit Command/Zustand
DI-Sichtbarkeit Registrierung vorhanden, kaum UI-Feedback aktiver Writer + Ergebnis direkt im UI sichtbar
MVVM nur rudimentär vollständig mit CommunityToolkit.Mvvm
Unit Tests keine 3 MSTest-Fälle
Lifecycle nicht sichtbar OnAppearing/OnDisappearing im ViewModel-Zustand
Architekturschichten nein nein (bewusst, gemäß Tabelle)

Fazit: Das agent-generated Beispiel zeigt Dependency Injection didaktisch klarer, weil Injection, Command-Flow und testbares Verhalten direkt nachvollziehbar sind.

Live-Coding

Repository

Verifikation

  • Tests: dotnet test DependencyInjection.Tests/DependencyInjection.Tests.csproj -f net10.0 → 3/3 erfolgreich
  • MacCatalyst-Build: dotnet build DependencyInjection/DependencyInjection.csproj -f net10.0-maccatalyst → erfolgreich