Я прочитал https://github.com/google/guice/wiki/AssistedInject , но он не говорит, как передать значения аргументов AssistedInject. Как будет выглядеть вызов injector.getInstance ()?
85
Я прочитал https://github.com/google/guice/wiki/AssistedInject , но он не говорит, как передать значения аргументов AssistedInject. Как будет выглядеть вызов injector.getInstance ()?
Ответы:
Проверьте javadoc класса FactoryModuleBuilder .
AssistedInject
позволяет динамически настраиватьFactory
класс вместо того, чтобы кодировать его самостоятельно. Это часто бывает полезно, когда у вас есть объект, у которого есть зависимости, которые должны быть введены, и некоторые параметры, которые необходимо указать во время создания объекта.Пример из документации - это
RealPayment
public class RealPayment implements Payment { @Inject public RealPayment( CreditService creditService, AuthService authService, @Assisted Date startDate, @Assisted Money amount) { ... } }
Посмотрите, что
CreditService
иAuthService
должно быть введено контейнером, но startDate и amount должны быть указаны разработчиком во время создания экземпляра.Таким образом, вместо того, чтобы вводить,
Payment
вы вводитеPaymentFactory
с параметрами, которые помечены как@Assisted
вRealPayment
public interface PaymentFactory { Payment create(Date startDate, Money amount); }
И завод должен быть привязан
install(new FactoryModuleBuilder() .implement(Payment.class, RealPayment.class) .build(PaymentFactory.class));
Настроенная фабрика может быть внедрена в ваши классы.
@Inject PaymentFactory paymentFactory;
и используется в вашем коде
источник
RealPayment
не нужно реализовывать интерфейс.