Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Service Locator und Dependency Injection Container: Was sind die Unterschiede? Wann was verwenden?
zero_x
myCSharp.de - Member

Avatar #avatar-2567.gif


Dabei seit:
Beiträge: 1.044
Herkunft: Koblenz

Themenstarter:

Service Locator und Dependency Injection Container: Was sind die Unterschiede? Wann was verwenden?

beantworten | zitieren | melden

Hallo zusammen,

Dependency Injection und Service Locator haben das selbe Ziel: das lösen von Abhängigkeiten. Doch wo ist der Unterschied zwischen den beiden Techniken? Wann soll man einen Service Locator und wann einen Dependency Injection Container verwenden? Beim MVVM-Pattern habe ich noch nie gesehen, dass dort Dependency Injection verwendet wird. Warum nicht? Wo sind die Unterschiede zwischen Dependency Injection und Service Locator?

zero_x
zero_x | myCSharp.de - gemeinsam mehr erreichen

Für längere Zeit inaktiv.
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 5.742
Herkunft: Stuttgart

beantworten | zitieren | melden

Hallo zero_x,

zunächst einmal: Die beiden Techniken sind nicht konkurrierend, sondern ergänzen sich.

Sowohl der ServiceLocator als auch DI-Container fallen in den Bereich der Dependency-Injection bzw. IoC.

Grob gesagt:
Ein ServiceLocator liefert etwas, was im Normalfall über die gesamte Lebensdauer einer Anwendung existiert (z.B. ein CustomerRepository oder gerade bei deinem Beispiel einen DialogService).
Im Normalfall gilt also:


Object.ReferenceEquals(serviceLocator.Resolve<IMyService>(), serviceLocator.Resolve<IMyService>());

Hingegen liefert ein Dependency-Injection-Container im Normalfall neue Objekte bzw. stattet neu erzeugte mit den benötigten Abhängigkeiten aus. Dabei wird häufig ein konkreter Typ anhand eines Interfaces erzeugt:


ICustomer = container.Create<ICustomer>(); //liefert jedes Mal einen neuen Customer

So viel jedenfalls zur Theorie.
In den meisten Fällen übernimmt eine gemeinsame Komponente die Aufgabe beide.
Siehe hierzu auch meine Gedanken in [IoC] Strengere Trennung zwischen ServiceLocator und DI-Container?
private Nachricht | Beiträge des Benutzers
Tarion
myCSharp.de - Member



Dabei seit:
Beiträge: 381

beantworten | zitieren | melden

Im Wesentlichen muss der DI-Container ja nur Singletons unterstüzen und schon kann er beides. So hab ich es vor kurzem realisiert.



ICustomer = container.Create<ICustomer>();
Wenn etwas erstellt werden soll und Abhängigkeiten hat, dann werden die Abhängigkeiten über Properties vom vorher Konfigurierten DI-Container gesetzt? Oder holen sich die erzeugten Objekte (hier der ICustomer) dann einfach ihre Abhängigkeiten aus dem container?

Edit: Ich sehe grade das diese Frage auch in deinem anderen Post auftaucht und hier wohl keine größere Disskusion bedarf.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Tarion am .
private Nachricht | Beiträge des Benutzers
zero_x
myCSharp.de - Member

Avatar #avatar-2567.gif


Dabei seit:
Beiträge: 1.044
Herkunft: Koblenz

Themenstarter:

beantworten | zitieren | melden

Hallo ihr Beiden,

vielen Dank für eure Hilfe!

zero_x
zero_x | myCSharp.de - gemeinsam mehr erreichen

Für längere Zeit inaktiv.
private Nachricht | Beiträge des Benutzers
Peter Bucher
myCSharp.de - Experte

Avatar #jVxXe7MDBPAimxdX3em3.jpg


Dabei seit:
Beiträge: 5.940
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Hallo zusammen

@Tarion & winSharp93
Service Locator oder Dependency Injection unterscheidet sich nicht durch Singleton oder nicht Singleton.
Die Unterscheidung liegt in der Anwendung, Service Locator explizit und Dependency Injection implizit.

@All

Golo hat das gut beschrieben:
- Dependency Injection ist keine Silberkugel


Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

- https://peterbucher.ch/ - Meine persönliche Seite
- https://fpvspots.net/ - Spots für FPV Dronenflüge
private Nachricht | Beiträge des Benutzers