Как использовать AssistedInject Guice? - PullRequest
77 голосов
/ 23 января 2012

Я прочитал https://github.com/google/guice/wiki/AssistedInject,, но там не сказано, как передать значения аргументов AssistedInject.Как будет выглядеть вызов injector.getInstance ()?

1 Ответ

150 голосов
/ 24 января 2012

Проверьте 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 и количество должны быть указаны разработчиком при создании экземпляра.

Таким образом, вместо инъекции 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;

и используется в вашем коде

Payment payment = paymentFactory.create(today, price);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...