Когда использовать контейнер IOC? - PullRequest
16 голосов
/ 31 марта 2010

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

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

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

1 Ответ

14 голосов
/ 31 марта 2010

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

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

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

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

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

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


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...