Вопрос

Какие наиболее важные функции должен содержать контейнер IOC?Вы можете легко создавать контейнеры в 15 строк кода, но что оно должно включать в себя, чтобы быть «полезным» в проекте?

Это было полезно?

Решение

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

  1. Конфигурация — Любой IoC, который вы используете, должен иметь какое-то центральное расположение, позволяющее вам настраивать поведение этого контейнера.Будь то файл конфигурации или хороший набор вызовов API, которые можно обернуть где-нибудь в глобальный класс, если контейнер нелегко настроить, это будет головная боль.
  2. Пожизненное управление - Вам действительно нужен контейнер, способный обеспечивать различное время жизни объектов.Возможно, вы захотите, чтобы определенный объект всегда получал новый IPersonCreator, но вам нужно, чтобы в любой момент времени существовал только один IPersonService.
  3. Автоматическое внедрение зависимостей - Хорошо, итак, внедрение зависимостей — это концепция, на которой построен IoC, но вам не нужно управлять этим самостоятельно.Идея здесь заключается в том, что если вы впервые запрашиваете IPersonCreator, он должен автоматически разрешить все свои зависимости, их зависимости и т. д.

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

Другие советы

В порядке убывания важности:

  1. Разрешить внедрение как минимум установщика и конструктора,
  2. Отделить конфигурацию от кода,
  3. Разрешить различные стили конфигурации (XML или аннотации),

Для этого потребуется более 15 строк кода, но мне они кажутся ключевыми.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top