16

Próbuję zrozumieć, kiedy powinienem użyć zależności kontenera i ręcznego wstrzykiwania. Jeśli mam aplikację, która korzysta z interfejsów 1-2 i ma tylko 1-2 implementacje konkretnych dla każdego interfejsu, chciałbym poprzestać na samym obsługiwaniu.Kiedy używać kontenera IOC?

Jeśli mam małą aplikację, która korzysta z 2-3 interfejsów, a każdy interfejs ma 2-3 konkretne implementacje, czy powinienem użyć pełnowymiarowego kontenera? Czy wystarczy coś prostego, na przykład this?

Zasadniczo staram się zrozumieć, kiedy właściwe jest ręcznie obsługiwać te zależności, kiedy (lub jeśli) powinienem użyć czegoś prostego, jak wyżej, i kiedy używać kontenera IOC, takiego jak Ninject, Windsor, itp ... Może nie być właściwe umieszczanie numeru na czymś takim, ale jak mogę powiedzieć, że nadszedł czas, aby użyć pojemnika z IOC?

+0

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

+0

Nie pytam, dlaczego powinienem użyć jeden, pytam, kiedy powinienem go użyć. Już jestem świadomy korzyści, ale nie jestem pewien, kiedy jest właściwy moment na skorzystanie z nich. – nivlam

Odpowiedz

14

Ważne jest, abyś mógł (i powinien) napisać swój kod w sposób: DI-friendly, but container-agnostic.

Oznacza to, że należy zawsze przesuwać kompozycję zależności do punktu, w którym nie można jej dłużej odłożyć. Jest to nazywane Composition Root i często umieszczane jest w pobliżu punktu wejścia aplikacji.

Jeśli projektujesz aplikację w ten sposób, Twój wybór DI Container (lub bez pojemnika DI) obraca się wokół jednego miejsca w aplikacji i możesz szybko zmienić strategię.

Możesz użyć biedaka DI jeśli masz tylko kilka zależności, czy możesz korzystać z pełnowymiarową DI Container. Używana w ten sposób, nie będziesz mieć żadnego uzależnienia od żadnego konkretnego pojemnika DI, więc wybór stanie się mniej istotny pod względem łatwości konserwacji .

Kontener DI pomaga zarządzać złożonością, w tym czasem życia obiektu. Używane tak, jak to opisano tutaj, nie robi niczego, czego nie można napisać w ręku, ale robi to lepiej i zwięźlej,. W związku z tym mój próg, od kiedy zacząć korzystać z pojemnika DI, byłby dość niski.

Zacznę używać kontenera DI, gdy przejdę przez kilka zależności. Most of them are pretty easy to get started with anyway.


Aktualizacja: Mój November 2012 answer to that question.

Powiązane problemy