Получите несколько новых экземпляров с 0 привязкой к Guice - PullRequest
2 голосов
/ 06 октября 2010

Я создал класс, который использует API Java Executor для создания / управления пулом с фиксированным числом потоков.Каждому потоку нужен новый экземпляр определенного объекта, и я хотел бы добавить этот объект с помощью Guice.На данный момент я использую провайдера, который предоставляет новые экземпляры объекта через его метод get ().

Но теперь этот класс имеет зависимость от провайдера, который специфичен для Guice, эффективно связывая код сGuice Framework.Мне бы очень хотелось, чтобы класс был действительно независимым от Guice, возможно ли это?

Просто создание новых экземпляров с использованием ключевого слова 'new' не вариант, так как это делает невозможным замену этих объектов на макет.реализация в модульном тесте.

Внедрение зависимостей, вероятно, не подходит для этого, и мне лучше создать фабрику для получения этих объектов?

Ответы [ 2 ]

3 голосов
/ 06 октября 2010

Одна вещь, которую вы можете рассмотреть, это собрать Guice из транка и использовать его до выхода Guice 3.0.Тогда вы можете использовать JSR-330 javax.inject.Provider вместо Guice.

Редактировать: Кроме этого, я 'Я обычно придерживаюсь мнения, что подключение к контейнеру DI (в данном случае путем импорта чего-либо из com.google.inject) является меньшей проблемой, чем это иногда делают люди.Пока вы не зависите от деталей того, как вы получаете свои зависимости (например, введение Injector повсеместно), довольно легко, скажем, изменить все места, в которые вы вводили Provider, чтобы использовать свой собственный интерфейс саналогичная функция вместо.В зависимости от мощных функций, таких как область видимости, вы действительно привязываетесь к контейнеру.Я думаю, что это также хорошо, учитывая, сколько уродства и усилий они спасают вас.

1 голос
/ 06 октября 2010

Если вы хотите, чтобы Guice вводил ваши объекты для вас, ваши объекты будут связаны с Guice.Так работает Guice.Вы можете обойтись, используя интерфейс провайдера, создав собственный интерфейс Factory и добавив его, но вам все равно понадобится @Inject, который соединит вас с Guice.

Лично я считаю, что вам следует пересмотретьтребование наличия 0-й связи с Guice, но если вам абсолютно необходимо иметь возможность писать классы, которые не имеют ссылок на ваш DI-контейнер, вы должны смотреть на что-то вроде Spring.

...