Как использовать Guice AssistedInject?
Я читал https://github.com/google/guice/wiki/AssistedInject, но он не говорит, как передать значения аргументов AssistedInject. Что бы инжектор.getInstance () вызов выглядит так?
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);