Как использовать Guice AssistedInject?
Я читал https://github.com/google/guice/wiki/AssistedInject, но он не говорит, как передать значения аргументов AssistedInject. Что бы инжектор.getInstance () вызов выглядит так?
1 ответ:
Регистрация документации в размере FactoryModuleBuilder класса.
AssistedInjectпозволяет динамически настраиватьFactoryдля класса вместо того, чтобы кодировать его самостоятельно. Это часто полезно, когда у вас есть объект, который имеет зависимости, которые должны быть введены и некоторые параметры, которые должны быть указаны во время создания объекта.пример из документации-это
RealPaymentpublic class RealPayment implements Payment { @Inject public RealPayment( CreditService creditService, AuthService authService, @Assisted Date startDate, @Assisted Money amount) { ... } }видно, что
CreditServiceиAuthServiceдолжно быть вводится контейнером, но startDate и сумма должны быть указаны разработчиком во время создания экземпляра.так что вместо инъекции
Paymentвы вводитеPaymentFactoryс параметрами, которые помечены как@AssistedнаRealPaymentpublic 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);