He leído https://github.com/google/guice/wiki/AssistedInject , pero no dice cómo pasar los valores de los argumentos AssistedInject. ¿Cómo sería la llamada injector.getInstance ()?
He leído https://github.com/google/guice/wiki/AssistedInject , pero no dice cómo pasar los valores de los argumentos AssistedInject. ¿Cómo sería la llamada injector.getInstance ()?
Respuestas:
Verifique el javadoc de la clase FactoryModuleBuilder .
AssistedInject
le permite configurar dinámicamente la Factory
clase en lugar de codificarla usted mismo. Esto suele ser útil cuando tiene un objeto que tiene dependencias que deben inyectarse y algunos parámetros que deben especificarse durante la creación del objeto.
El ejemplo de la documentación es un RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
Ver eso CreditService
yAuthService
debe ser inyectado por contenedor, pero el desarrollador debe especificar startDate y la cantidad durante la creación de la instancia.
Entonces, en lugar de inyectar a Payment
, está inyectando a PaymentFactory
con parámetros que están marcados como @Assisted
enRealPayment
public interface PaymentFactory {
Payment create(Date startDate, Money amount);
}
Y una fábrica debería estar encuadernada
install(new FactoryModuleBuilder()
.implement(Payment.class, RealPayment.class)
.build(PaymentFactory.class));
La fábrica configurada se puede inyectar en sus clases.
@Inject
PaymentFactory paymentFactory;
y usado en tu código
Payment payment = paymentFactory.create(today, price);
RealPayment
no es necesario implementar una interfaz.