Я хотел бы получить некоторые предложения и отзывы о том, как лучше структурировать внедрение зависимостей для системы со структурой, описанной ниже. Я использую Guice и поэтому предпочел бы решения, основанные на объявлениях, основанных на аннотациях, а не на XML-насыщенной конфигурации в стиле Spring.
Рассмотрим набор похожих объектов, Ball, Box, and Tube
, каждый из которых зависит от Logger
, предоставленного через конструктор. (Это может быть не важно, но все четыре класса - это синглтоны - приложения, а не Gang-of-Four, разновидность.)
Класс ToyChest
отвечает за создание и управление тремя объектами формы. ToyChest
само по себе не зависит от Logger
, кроме создания объектов формы, которые являются.
Класс ToyChest
создается как одноэлемент приложения в классе Main
.
Я не уверен, как лучше построить фигуры в ToyChest
. Мне либо (1) нужен доступ к экземпляру Guice Injector
, уже прикрепленному к Module
привязке Logger
к реализации, либо (2) необходимо создать новый Injector
, присоединенный справа Module
.
(1) достигается добавлением поля @Inject Injector injector
к ToyChest
, но это кажется странным, потому что ToyChest
на самом деле не имеет никаких прямых зависимостей - только от дочерних элементов, которые он создает.
Для (2) я не уверен, как передать соответствующий Module
.
Я на правильном пути? Есть ли лучший способ структурировать это?
В ответах на этот вопрос упоминается прохождение Provider
вместо непосредственного использования инжектора, но я не уверен, как это должно работать.
EDIT:
Возможно, более простой вопрос: при использовании Guice, где находится подходящее место для конструирования объектов фигур? ToyChest
выполнит некоторую настройку с ними, но я предполагаю, что они могут быть созданы в другом месте. ToyChest
(как контейнер, управляющий ими), а не Main
, мне просто кажется подходящим местом для их создания.