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 .
AssistedInjectle permite configurar dinámicamente laFactoryclase 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
RealPaymentpublic class RealPayment implements Payment { @Inject public RealPayment( CreditService creditService, AuthService authService, @Assisted Date startDate, @Assisted Money amount) { ... } }Ver eso
CreditServiceyAuthServicedebe 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 aPaymentFactorycon parámetros que están marcados como@AssistedenRealPaymentpublic 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
RealPaymentno es necesario implementar una interfaz.