Registry Muster
Registry pattern ist ein Muster verwendet, zu wissen, seinen Namen nur ein Objekt zum Nachschlagen. Dieses Muster speichert Instanzen von Objekten intern und verwendet eine Wörterbuchzuordnung, um diese Instanzen später abzurufen.
DI Container/DI Muster
A DI Behälter enthält ein Register, die eine Zuordnung von Objekttypen zu Abstraktionen hat. Es ist weiter fortgeschritten, dass wenn ein Objekt aufgelöst wird, es instanziiert wird, und so sind alle Abhängigkeiten des Objekts.
Wenn Sie ein Objekt aus einem DI-Container anfordern, erhalten Sie einen Objektgraph mit dem Objekt beginnen Sie als Root-fordern. Jedes abhängige Objekt wird automatisch injiziert, indem der Konstruktor jeder Klasse rekursiv durchlaufen wird, beginnend bei den Klassen, die keine Abhängigkeiten haben, und jedes Objekt unter Verwendung der Registrierung als Leitfaden instanziiert wird.
Dependency Injection ist ein Muster, dass doesn't necessarily use a DI container. Das DI-Muster besteht aus einem composition root, der sich am Eingangspunkt der Anwendung befindet. Der Kompositionswurzel befindet sich dort, wo die Typen registriert sind und wo das Wurzelobjektdiagramm instanziiert wird. Nachdem das Stammobjekt instanziiert wurde, wird die Anwendung eigenständig ausgeführt. Die Anwendung selbst hat keine Referenz auf den DI-Container und ist nicht eng mit ihr verbunden.
Service Locator
Service Locator wird von vielen Menschen als anti-pattern zu sein. Die Idee ist, dass Sie entweder den Container in Ihr Objekt injizieren oder einen statischen Verweis auf den DI-Container verwenden, um Instanzen zur Laufzeit zu erstellen.
Der Hauptunterschied besteht darin, dass die Anwendung explizit abhängige auf (also eng gekoppelt) die DI-Container.
Ein weiterer Nachteil bei der Verwendung von Service Locator ist, dass es aufgrund der Injektion des DI-Containers nicht möglich ist, von den Klassenkonstruktoren aus zu sehen, von welchen Schnittstellen sie abhängig ist. Sie müssen stattdessen die Dokumentation konsultieren oder den Quellcode analysieren, um festzustellen, welche Abhängigkeiten eine Klasse aufweist.
Obwohl es als Anti-Pattern betrachtet wird, gibt es immer noch einige Situationen, in denen es sinnvoll ist, es zu verwenden. Es sollte jedoch als letzter Ausweg betrachtet werden, nachdem alle anderen Optionen (Umgebungskontext, Eigentumsinjektion, etc.) ausgeschöpft wurden.