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 ()?
84
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 laFactory
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 aPaymentFactory
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
fuente
RealPayment
no es necesario implementar una interfaz.