Как использовать Guice AssistedInject?


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

1 76

1 ответ:

Регистрация документации в размере 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);