Ich denke, niemand kann es besser erklären als Martin Fowler, weiter unten in dem Artikel, mit dem Sie verlinkt sind .
Bei dieser neuen Art von Containern geht es bei der Inversion darum, wie sie nach einer Plugin-Implementierung suchen. In meinem naiven Beispiel hat der Lister die Finder-Implementierung gesucht, indem er sie direkt instanziiert hat. Dies verhindert, dass der Finder ein Plugin ist. Der Ansatz, den diese Container verwenden, besteht darin, sicherzustellen, dass jeder Benutzer eines Plugins einer Konvention folgt, die es einem separaten Assembler-Modul ermöglicht, die Implementierung in den Lister zu injizieren.
Wie er in den obigen Abschnitten erklärt, ist dies nicht ganz derselbe Grund, aus dem der Begriff "Inversion of Control" entstand.
Wenn diese Container darüber sprechen, wie nützlich sie sind, weil sie "Inversion of Control" implementieren, bin ich sehr verwirrt. Die Umkehrung der Kontrolle ist ein gemeinsames Merkmal von Frameworks. Wenn man also sagt, dass diese leichten Container etwas Besonderes sind, weil sie eine Umkehrung der Kontrolle verwenden, dann ist das so, als ob mein Auto etwas Besonderes ist, weil es Räder hat.
Die Frage ist, welchen Aspekt der Kontrolle invertieren sie? Als ich zum ersten Mal auf die Umkehrung der Steuerung stieß, befand sie sich in der Hauptsteuerung einer Benutzeroberfläche. Frühe Benutzeroberflächen wurden vom Anwendungsprogramm gesteuert. Sie hätten eine Folge von Befehlen wie "Name eingeben", "Adresse eingeben"; Ihr Programm würde die Eingabeaufforderungen auslösen und eine Antwort auf jede einzelne aufgreifen. Bei grafischen (oder sogar bildschirmbasierten) Benutzeroberflächen würde das UI-Framework diese Hauptschleife enthalten und Ihr Programm stattdessen Ereignishandler für die verschiedenen Felder auf dem Bildschirm bereitstellen. Die Hauptsteuerung des Programms wurde invertiert, von Ihnen weg in das Framework verschoben.
Aus diesem Grund prägt er den Begriff "Abhängigkeitsinjektion", um diese spezifische Implementierung von Inversion of Control zu behandeln.
Aus diesem Grund denke ich, dass wir einen genaueren Namen für dieses Muster benötigen. Die Umkehrung der Kontrolle ist ein zu allgemeiner Begriff und wird daher von den Menschen als verwirrend empfunden. Infolge zahlreicher Diskussionen mit verschiedenen IoC-Befürwortern haben wir uns für den Namen Dependency Injection entschieden.
Um es ein wenig zu verdeutlichen: Umkehrung der Kontrolle bedeutet alles, was die Kontrollstruktur eines Programms von der klassischen prozeduralen Gestaltung umkehrt.
In früheren Zeiten war ein Schlüsselbeispiel dafür, dass ein Framework die Kommunikation zwischen einer Benutzeroberfläche und Ihrem Code handhabte, anstatt Ihren Code für die direkte Generierung der Benutzeroberfläche zu belassen.
In jüngerer Zeit (als solche Frameworks so ziemlich dominierten und die Frage nicht mehr relevant war) war ein Beispiel die Umkehrung der Kontrolle über die Instanziierung von Objekten.
Fowler und andere entschieden, dass der Begriff Inversion of Control zu viele Techniken abdeckte, und wir brauchten einen neuen Begriff für das spezifische Beispiel der Instanziierung von Objekten (Abhängigkeitsinjektion), aber zu dem Zeitpunkt, als diese Vereinbarung getroffen worden war, den Ausdruck "IoC-Container" "war ausgezogen.
Dies trübt das Wasser sehr, da ein IoC-Container eine bestimmte Art von Abhängigkeitsinjektion ist, aber Abhängigkeitsinjektion ist eine bestimmte Art von Inversion der Steuerung. Dies ist der Grund, warum Sie so verwirrte Antworten erhalten, egal wo Sie hinschauen.