Лучшие практики внедрения зависимостей - PullRequest
8 голосов
/ 29 октября 2009

Я использую Dependency Injection в своем коде (с Ninject ) и думал, что у меня все хорошо, пока не столкнулся с проблемой производительности, вызванной неправильным пониманием того, как DI-контейнеры вписываются в ваш код. Кажется, есть много информации о том, как использовать DI-фреймворки, но не слишком много о том, где их не использовать или как их лучше всего использовать (по крайней мере, я смог найти)

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

  • Использовать одно ядро ​​на приложение или домен приложения
  • Использовать контейнер DI только для долгоживущих объектов Singleton, использовать фабрики (или другие методы) для кратковременных переходных объектов)
  • Предпочитать инжектор конструктора, а не свойство или поле
  • Запрашивать объекты, не строить их
  • другие ?? ссылки на хороший блог / статьи ??

Ответы [ 2 ]

7 голосов
/ 29 октября 2009

Вот краткий список наиболее важных моментов (некоторые из которых также появляются в ОП):

  • Код не должен знать, какой контейнер DI (если есть) используется
  • Составьте все приложение в корне приложения (Composition Root)
  • Favor Constructor Injection

Не могу сказать, что согласен с вашей точкой зрения относительно объектов Singleton и Transient. Весь смысл DI состоит в том, что внешний механизм (такой как Контейнер DI) определяет время жизни любой данной зависимости, а не кого-то другого, поэтому вам необходимо управлять всеми зависимостями Контейнером DI.

4 голосов
/ 03 ноября 2009

Использовать контейнер DI только для долгоживущих объектов Singleton, использовать фабрики (или другие методы) для кратковременных переходных объектов)

Но используйте DI, чтобы вводить фабрики туда, где это необходимо.

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