Diese Anwendung demonstriert die verschiedenen Dependency Injection (DI) Lebenszyklus-Optionen in ASP.NET Core. Das Projekt veranschaulicht anhand eines einfachen Beispiels, wie sich die drei Haupttypen der Dependency Injection (Singleton, Scoped und Transient) in einer ASP.NET Core Anwendung verhalten.
Die Anwendung injiziert fünf Service-Instanzen in den HomeController:
- Ein Singleton-Service
- Zwei Transient-Services
- Zwei Scoped-Services
Beim Aufruf der Homepage werden die GUIDs aller Services angezeigt, wodurch das Verhalten der verschiedenen Lebenszyklen sichtbar wird.
"singleton": "a0e0606a-a535-48d0-af47-8b3416d8c15a"
🔹 Eine Instanz für die gesamte Anwendung
Bei jeder Anfrage und in jeder Controller-Instanz bleibt die ID eines Singleton-Services identisch. Die Instanz wird einmal für die gesamte Anwendungslaufzeit erstellt.
Anwendungsfall: Gut für zustandslose Services oder wenn ein gemeinsamer Zustand über die gesamte Anwendung benötigt wird.
"transient": "9e9b520e-1f5b-44c8-9ff5-ea8db1e1f397"
"transient2": "f6ed469a-0e84-4243-af7e-083098b790a0"
🔹 Eine neue Instanz bei jeder Anforderung
Transient-Services haben unterschiedliche IDs, selbst wenn sie im selben Controller und innerhalb derselben Anfrage angefordert werden. Jede Injection erzeugt eine neue Instanz.
Anwendungsfall: Ideal für leichtgewichtige, zustandslose Services.
"scoped": "732e509f-e860-48f2-8402-7b8a71f637eb"
"scoped2": "732e509f-e860-48f2-8402-7b8a71f637eb"
🔹 Eine Instanz pro HTTP-Anfrage
Scoped-Services haben innerhalb einer HTTP-Anfrage die gleiche ID. Bei einer neuen Anfrage (z.B. Seite neu laden) werden neue Instanzen mit neuen IDs erstellt.
Anwendungsfall: Perfekt für Services, die innerhalb einer Anfrage einen gemeinsamen Zustand haben sollen, wie z.B. Datenbankverbindungen.
📁 DI-Demo
┣ 📁 Controllers
┃ ┗ 📄 HomeController.cs // Controller mit injizierten Services
┣ 📁 Services
┃ ┣ 📄 ITransientService.cs // Interface für Transient-Service
┃ ┣ 📄 IScopedService.cs // Interface für Scoped-Service
┃ ┣ 📄 ISingletonService.cs // Interface für Singleton-Service
┃ ┣ 📄 TransientService.cs // Implementierung des Transient-Service
┃ ┣ 📄 ScopedService.cs // Implementierung des Scoped-Service
┃ ┗ 📄 SingletonService.cs // Implementierung des Singleton-Service
┣ 📁 Views
┃ ┗ 📁 Home
┃ ┗ 📄 Index.cshtml // View zur Anzeige der Service-IDs
┣ 📄 Program.cs // Konfiguration und Service-Registrierung
┗ 📄 README.md
-
Klonen Sie das Repository
git clone [repository-url]
-
Navigieren Sie zum Projektverzeichnis
cd di-demo -
Starten Sie die Anwendung
dotnet run
-
Öffnen Sie im Browser
https://localhost:5001/ -
Beobachten Sie die IDs und aktualisieren Sie die Seite mehrmals
- ✅ Grundlegende Dependency Injection in ASP.NET Core verstehen
- ✅ Unterschiede zwischen Singleton-, Scoped- und Transient-Diensten erkennen
- ✅ Services im Dependency Injection Container registrieren
- ✅ Services in Controllern richtig verwenden
// DI Container konfigurieren
builder.Services.AddTransient<ITransientService, TransientService>();
builder.Services.AddScoped<IScopedService, ScopedService>();
builder.Services.AddSingleton<ISingletonService, SingletonService>();public class HomeController : Controller
{
private readonly ISingletonService _singletonService;
private readonly ITransientService _transientService;
private readonly ITransientService _transientService2;
private readonly IScopedService _scopedService;
private readonly IScopedService _scopedService2;
public HomeController(
ISingletonService singletonService,
ITransientService transientService,
ITransientService transientService2,
IScopedService scopedService,
IScopedService scopedService2)
{
_singletonService = singletonService;
_transientService = transientService;
_transientService2 = transientService2;
_scopedService = scopedService;
_scopedService2 = scopedService2;
}
// Controller-Actions...
}