Как мне написать Guice Provider, который явно не создает объекты? - PullRequest
2 голосов
/ 15 апреля 2010

Скажем, у меня есть ClassWithManyDependencies. Я хочу написать провайдера Guice для этого класса, чтобы несколько раз создать новый экземпляр класса в моей программе (другой класс будет зависеть от этого провайдера и использовать его в нескольких точках для создания новых экземпляров).

Один из способов добиться этого - заставить провайдера зависеть от всех зависимостей ClassWithManyDependencies. Это довольно некрасиво.

Есть ли лучший способ добиться этого?

Примечание. Я определенно не хочу, чтобы Поставщик зависел от инжектора. Другой вариант, который я рассмотрел, заключается в том, чтобы ClassWithManyDependencies и ClassWithManyDependenciesProvider расширяли один и тот же базовый класс, но это неприятно.

Ответы [ 2 ]

9 голосов
/ 15 апреля 2010

Как уже упоминалось в списке рассылки, везде, где вы можете ввести ClassWithManyDependencies, вы можете просто ввести Provider<ClassWithManyDependencies> вместо этого, не нужно писать что-то особенное самостоятельно. Guice делает это для вас.

0 голосов
/ 15 апреля 2010

Вам не нужно писать провайдера, кроме как для интеграции с другими платформами.

Просто НЕ связывайте ваши ClassWithManyDependencies в области видимости SINGLETON и в классе, который хочет построить много экземпляров, вместо того, чтобы вставлять экземпляр ClassWithManyDependencies, у вас вставлен поставщик. (Guice может сделать это бесплатно для каждого связанного класса)

Для этого провайдера вы можете просто вызвать get (), если он не находится в области действия SINGLETON, он каждый раз создает новый новый экземпляр.

Теперь, если вы оказались в сложном случае, когда ClassWithManyDependencies полагается как на некоторый GUICE IOC, так и на некоторые параметры конструктора, то вы должны перейти к Assisted Injection

...