Когда использовать контейнер МОК?

Я пытаюсь понять, когда я должен использовать контейнер по сравнению с ручным введением зависимостей. Если у меня есть приложение, которое использует 1-2 интерфейсы и только имеет 1-2 конкретных реализации для каждого интерфейса, я склонился бы только к обработке этого сам.

Если у меня есть небольшое приложение, которое использует 2-3 интерфейса, и каждый интерфейс имеет 2-3 конкретных реализации, я должен использовать полноценный контейнер? Был бы что-то, что что-то простое как это удовлетворяет?

В основном я пытаюсь понять, когда уместно вручную обработать эти зависимости, когда (или если) я должен использовать что-то простое как вышеупомянутое, и когда использовать контейнер МОК как Ninject, Виндзор, и т.д.... Не могло бы быть уместно поместить число на что-то вроде этого, но как я могу сказать, что пора использовать контейнер МОК?

16
задан nivlam 31 March 2010 в 06:58
поделиться

1 ответ

Здесь важно понимать, что вы можете (и должны) писать свой код в DI-дружественном, но не зависящем от контейнерах манера.

Это означает, что вы всегда должны доводить композицию зависимостей до такой степени, когда вы не можете больше откладывать ее. Это называется Composition Root и часто располагается рядом с точкой входа в приложение.

Если вы разрабатываете свое приложение таким образом, ваш выбор DI-контейнера (или отсутствия DI-контейнера) зависит от одного места в вашем приложении, и вы можете быстро изменить стратегию.

Вы можете использовать DI для бедняков , если у вас есть только несколько зависимостей, или вы можете использовать полномасштабный DI-контейнер . При таком использовании вы не будете зависеть от какого-либо конкретного контейнера DI, поэтому выбор становится менее важным с точки зрения ремонтопригодности.

Контейнер DI помогает управлять целостностью, включая время жизни объекта. При использовании, как описано здесь, он не делает того, что вы не могли бы написать от руки, но делает это лучше и лаконичнее . Таким образом, мой порог, когда начать использовать контейнер DI, был бы довольно низким.

Я бы начал использовать контейнер DI, как только избавлюсь от некоторых зависимостей. С большинством из них все равно довольно легко начать .


Обновление: Мой ноябрь 2012 г. ответ на этот вопрос .

14
ответ дан 30 November 2019 в 22:55
поделиться