16

Ich versuche zu verstehen, wann ich einen Container im Vergleich zu manuell injizierenden Abhängigkeiten verwenden sollte. Wenn ich eine Anwendung habe, die 1-2 Schnittstellen verwendet und nur 1-2 konkrete Implementierungen für jede Schnittstelle hat, würde ich mich darauf beschränken, das selbst zu handhaben.Wann sollte ein IOC-Container verwendet werden?

Wenn ich eine kleine Anwendung habe, die 2-3 Schnittstellen verwendet und jede Schnittstelle 2-3 konkrete Implementierungen hat, sollte ich einen ausgewachsenen Container verwenden? Würde etwas so einfaches wie this ausreichen?

Im Grunde versuche ich zu verstehen, wann es angemessen ist, diese Abhängigkeiten manuell zu behandeln, wann (oder ob) ich etwas Einfaches wie oben verwenden sollte und wann ich einen IOC-Container wie Ninject, Windsor usw. verwenden soll. Es ist vielleicht nicht angebracht, eine Zahl auf etwas so zu setzen, aber wie kann ich feststellen, dass es Zeit ist, einen IOC-Container zu verwenden?

+0

http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed-to-straightforward-di-code –

+0

Ich frage nicht, warum ich verwenden sollte Eins frage ich, wann ich eins benutzen soll. Ich bin mir bereits der Vorteile bewusst, aber ich bin mir nicht sicher, wann der richtige Zeitpunkt ist, um einen zu nutzen. – nivlam

Antwort

14

Die wichtige Sache, die hier zu realisieren ist, dass Sie Ihren Code in eine DI-friendly, but container-agnostic Weise schreiben können (und sollten).

Dies bedeutet, dass Sie die Zusammensetzung der Abhängigkeiten immer so weit verschieben sollten, dass Sie sie nicht länger verschieben können. Dies wird Composition Root genannt und wird oft in der Nähe des Eingangspunkts der Anwendung platziert.

Wenn Sie Ihre Anwendung auf diese Weise entwerfen, dreht sich Ihre Wahl des DI-Containers (oder kein DI-Container) um einen einzelnen Platz in Ihrer Anwendung und Sie können schnell die Strategie ändern.

können Sie wählen Poor Man DI verwenden wenn Sie nur ein paar Abhängigkeiten haben, oder Sie können einen ausgewachsenen DI Container verwenden wählen. Auf diese Weise verwendet, haben Sie keine Abhängigkeit von einem bestimmten DI-Container, so dass die Wahl weniger wichtig ist in Bezug auf die Wartbarkeit.

Ein DI-Container hilft Ihnen bei der Verwaltung der Komplexität, einschließlich der Lebensdauer von Objekten. Verwendet wie hier beschrieben, es tut nichts, was Sie nicht in der Hand schreiben könnten, aber es tut es besser und prägnanter. Daher wäre mein Schwellenwert für die Verwendung eines DI-Containers ziemlich niedrig.

Ich würde anfangen, einen DI-Container zu verwenden, sobald ich einige Abhängigkeiten überhole. Most of them are pretty easy to get started with anyway.


Aktualisierung: My November 2012 answer to that question.

Verwandte Themen