Проверьте 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);