Sie sind hier:
Lexikon/Glossar
Telefon (Mo-Fr 9-16 Uhr):
0201/649590-0
|
Kontaktformular
MENU
Start
Hauptseite
Angebote im Überblick
Kernkompetenzen
Softwareentwicklung
Beratung
Firmen-Schulungen
Offene Seminare
Online-Maßnahmen
Vorträge
Coaching
Support
Fachbücher
Fachartikel
Konditionen
Themen
Kernkompetenzen
Aktuelle Themen
Web & Cloud
Apps / Mobilplattformen
Benutzeroberflächen / User Experience
.NET
JavaScript / TypeScript
Java
Programmiersprachen
Entwicklungswerkzeuge
Scripting
Softwareengineering
Datenbanken / Reporting / BI
Betriebssysteme & Virtualisierung
Microsoft Server-Produkte
Windows & Office für Anwender
Soft Skills & IT-Recht
Beratung
Beratungsthemen
Coaching
Softwareentwicklung
Technischer Support
Unsere Top-Berater
Referenzkunden
Angebotsanfrage
Individuelle Schulungen
1026 Schulungsthemen
Agendakonfigurator
Weiterbildungsphilosophie
Didaktische Konzepte
Vor Ort oder online
Unsere Top-Trainer
Referenzkunden
Teilnehmerfeedback
Angebotsanfrage
Offene Seminare
.NET-Akademie
.NET/C#-Basisseminar
WPF
WinUI
.NET MAUI
Blazor
ASP.NET WebAPI & gRPC
Entity Framework Core
Unit Testing / TDD
PowerShell
Infotage
Wissen
Übersicht
Fachbücher
Fachartikel
Konferenzvorträge
Konferenzen/Events
Spickzettel
Lexikon/Glossar
Programmcodebibliothek
Versionshistorie
Weblog
Downloads
Newsletter
Community-/Leserportal
Registrierung
.NET/C#/Visual Studio
.NET 10.0
.NET 9.0
.NET 8.0
ASP.NET (Core)/Blazor
PowerShell
Über uns
Kontakt
Selbstdarstellung
Kernkompetenzen
Dr. Holger Schwichtenberg
Top-Experten
Leitung & Kundenteam
Referenzkunden
Kundenaussagen
Referenzprojekte
Partner
Konditionen
Stellenangebote
Weitere Websites
Impressum
Datenschutzerklärung, Haftung, Urheberrecht, Barrierefreiheit
Suche
Themenkatalog
Tag Cloud
Volltextsuche
Site Map
FAQs
Erklärung des Begriffs: Dependency Injection
Zur Stichwortliste unseres Lexikons
Was ist
Dependency Injection
?
Dependency Injection (deutsch: Einbringen von Abhängigkeiten) ist ein
Entwurfsmuster
der objektorientierten Programmierung (
OOP
), bei dem Abhängigkeit zwischen Objekte erst zur Laufzeit hergestellt werden. Dabei werden die Abhängigkeiten nicht wie in einem herkömmlichen System in einzelnen Klassen, sondern an zentraler Stelle in einem sogenannten "DI Container" (Injektor) festgelegt (Single-Responsibility-Prinzip /
Inversion of Control
). Der DI-Container ist dafür zuständig, die Abhängigkeiten zur Laufzeit herzustellen.
Dependecy Injection ist eine Kerntechnik für die Entwicklung lose gekoppelter Systeme, bei der die Anwendungsteile erst beim Start der Anwendung zusammengesetzt werden.
Der Begriff DI soll auf Martin Fowler [
https://martinfowler.com/articles/injection.html
] zurückgehen.
Beispiel: Eine Klasse "Auto" sieht vor, eine Beziehung zur eine Schnitstelle IFahrer zu haben. Per Dependency Injection (DI) wird an zentraler Stelle festgelegt, welche Klasse für die Schnittstelle IFahrer verwendet werden soll. Im Standard könnte man die Klasse MenschlicherFahrer verwenden. Man könnte aber stattdessen das System auch starten mit einer Instanz der Klasse Prüfstand oder der Klasse AutomatisierterFahrer, die beide auch IFahrer implementieren.
Häufiges Anwendungsgebiet für Dependency Injection: Ersetzen von realen Implementierungen durch
Mock-Objekt
e im Rahmen von Unit Tests.
Vorteile der Dependency Injection:
Lose Kopplung / Single-Responsibility-Prinzip
Konfigurierbarkeit (auch zur Betriebszeit)
Zentrale Initialisierung
Abstraktion von konkreten Implementierungen
Testbarkeit
Nachteile der Dependency Injection:
Erhöhter Aufwand
Erhöhte Komplexität
Code unübersichtlicher, schlechter lesbar
Abhängigkeit von Dependency Injection-Framework
Formen der Dependency Injection
Konstruktor-Injektion
Property
-Injektion
Methode
n-Injektion
Dependency Injection-Frameworks in
.NET
Microsoft Unity Container
:
https://github.com/unitycontainer/unity
Castle Windsor
Autofac
StructureMap
Beispielcode: Dependency Injection ohne Dependency Injection-Container-Framework
In einem
Komponente
nbasierten Systeme bzw. bei der Nutzung eines Services instanziiert der Client normalerweise den Server/die
Komponente
/den Service:
class Umwelt
{
Client c = new Client();
c.Vorgang()
}
class Client
{
public void Vorgang()
{
Dienst d = new Dienst();
d.Aktion();
}
}
class Dienst
{
public void Aktion()
{
…
}
}
Der Nachteil dieser
Methode
ist,
a) dass der Dienst nicht einfach gegen einen anderen ausgetauscht werden kann
b) dass der Client nicht ohne den Dienst getestet werden kann.
Dependency Injection geht davon aus, dass die konkrete Implementierung des Dienstes variabel ist und von der Umwelt an den Client übergeben wird, z.B. im Konstruktor oder durch Übergabe ein ein
Property
, einen
Methode
naufruf. Dabei kann entweder der Typ des Dienstes, direkt eine Instanz des Dienstes oder aber ein Initialisierungsobjekt übergeben werden, das den Dienst beschreibt.
Beispeil: Injektion durch Konstruktor und eine konkrete Instanz
class Umwelt
{
Client c = new Client(new Dienst());
c.Vorgang()
}
class Client
{
Dienst d;
public Client(Dienst Dienst)
{
d = Dienst;
}
public void Vorgang()
{
d.Aktion();
}
}
class Dienst
{
public void Aktion()
{
…
}
}
Querverweise zu anderen Begriffen im Lexikon
Microsoft Unity Container
Inversion of Control (IoC)
Entwurfsmuster
Mock-Objekt
Komponente
Property
Methode
.NET (DOTNET)
Objektorientiertes Programmieren (OOP)
Beratung & Support
Anfrage für Beratung/Consulting zu DEPENDENCY INJECTION
Gesamter Beratungsthemenkatalog
Technischer Support zum DEPENDENCY INJECTION
Schulungen
Inversion of Control (IoC) / Dependency Injection (DI) mit .NET
.NET Akademie: Blazor-Hands-On: Echte Single-Page-Web-Apps mit .NET und C# entwickeln (3-Tages-Agenda des öffentlichen Seminars)
ASP.NET Core 7.0 - Änderungen und Neuerungen gegenüber ASP.NET Core 6.0
ASP.NET Core 9.0 - Änderungen und Neuerungen gegenüber ASP.NET Core 8.0
Avalonia - Cross-Plattform-GUI-Anwendungen mit .NET und XAML
Umstieg auf .NET Multi-Platform App UI (MAUI) (Umstellung/Migration von Xamarin Forms-Apps auf .NET MAUI)
Uno Platform - Cross-Plattform-GUI-Anwendungen mit .NET und XAML
.NET-Softwarearchitektur (Architektur von .NET-Anwendungen)
Angular - Basiswissen
Angular für Umsteiger von AngularJS 1.x / Migration von AngularJS auf Angular
ASP.NET Core 8.0 - Änderungen und Neuerungen gegenüber ASP.NET Core 7.0
ASP.NET Core 8.0/9.0/10.0: komplettes Wissen - mit MVC, Razor Pages, Blazor, WebAPIs und gRPC
ASP.NET Core WebAPI 8.0/9.0/10.0: REST Services/HTTP Services/Microservices
ASP.NET Model View Controller (ASP.NET MVC) und ASP.NET WebAPI für ASP.NET MVC 5.x oder ASP.NET MVC Core 8.0/9.0/10.0
Aurelia
Blazor (Blazor United und/oder Blazor SSR und/oder Blazor WebAssembly und/oder Blazor Server und/oder Blazor Hybrid)
Einstieg in Enterprise JavaBeans (EJB)
EJB 3.x für Einsteiger
EJB 3.x Update für Umsteiger von EJB 2.x
Java Server Faces (JSF)
Managed Extensibility Framework (MEF) - Modulare/erweiterbare .NET-Anwendungen
Mehrschichtiges Entwickeln mit .NET
Moderne Web-Anwendungen mit ASP.NET (Core) MVC, WebAPI, HTML5.x/CSS3 und JavaScript-/TypeScript-Frameworks
Moderne Web-Anwendungen mit TypeScript und Angular
Modulare Softwarearchitektur mit .NET: Modularisierung, Lose Kopplung, Austauschbarkeit und Erweiterbarkeit von .NET-Anwendungen
Objektorientierte Entwurfsmuster (Design-Pattern/Architektur-Pattern) mit .NET (C#, Visual Basic .NET)
React Native
Spring Boot
Umstieg auf ASP.NET Core 8.0/9.0/10.0-Webanwendungen in .NET 8.0/9.0/10.0 (Umstellung/Migration von klassischen ASP.NET-Webanwendungen auf ASP.NET Core)
Umstieg von .NET-Desktop-Entwicklung (WPF/Windows Forms) auf Webentwicklung (ASP.NET/ASP.NET Core + JavaScript/TypeScript mit Webframeworks wie Angular, Vue.js oder React)
Anfrage für eine individuelle Schulung zum Thema DEPENDENCY INJECTION
Gesamter Schulungsthemenkatalog
Fachbücher
Blazor 10.0: Moderne Webanwendungen und hybride Cross-Platform-Apps mit .NET 10.0, C# 14.0 und Visual Studio 2026
C# 14.0 Crashkurs
Moderne Datenzugriffslösungen mit Entity Framework Core 10.0
.NET 10.0 Update: Die Neuerungen in .NET 10.0 gegenüber .NET 9.0
Blazor 9.0: Moderne Webanwendungen und hybride Cross-Platform-Apps mit .NET 9.0, C# 13.0 und Visual Studio 2022
C# 13.0 Crashkurs
Cross-Plattform-Apps mit .NET MAUI entwickeln
Moderne Datenzugriffslösungen mit Entity Framework Core 9.0
.NET 9.0 Update: Die Neuerungen in .NET 9.0 gegenüber .NET 8.0
PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch
.NET 8.0 Update: Die Neuerungen in .NET 8.0 gegenüber .NET 7.0
Concurrency with Modern C++: What every professional C++ programmer should know about concurrency
C++20: Get the Details
Blazor 8.0: Moderne Webanwendungen und hybride Cross-Platform-Apps mit .NET 8.0, C# 12.0 und Visual Studio 2022
Moderne Datenzugriffslösungen mit Entity Framework Core 8.0
C# 12.0 Crashkurs
App-Entwicklung für Mobile und Desktop: Software Engineering mit .NET MAUI und Comet für iOS, Android, Windows und macOS
Cross-Plattform-Apps mit .NET MAUI entwickeln
Blazor 7.0: Blazor WebAssembly, Blazor Server und Blazor Hybrid
C# 11.0 Crashkurs
Moderne Datenzugriffslösungen mit Entity Framework Core 7.0
PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch
C++ Core Guidelines Explained: Best Practices for Modern C++
App Engineering: SwiftUI, Jetpack Compose, .NET MAUI und Flutter
Vue.js 3 Crashkurs
Moderne Datenzugriffslösungen mit Entity Framework Core 6.0
Blazor 6.0: Blazor WebAssembly, Blazor Server und Blazor Desktop
C# 10.0 Crashkurs
Cross-Plattform-Apps mit Xamarin.Forms entwickeln
Developing Web Components with TypeScript: Native Web Development Using Thin Libraries
Alle unsere aktuellen Fachbücher
E-Book-Abo für ab 99 Euro im Jahr