2012-01-23 8 views

Respuesta

127

Compruebe el javadoc de la clase FactoryModuleBuilder.

AssistedInject le permite configurar dinámicamente Factory para la clase en lugar de codificarlo usted mismo. Esto a menudo es útil cuando tienes un objeto que tiene una dependencia que se debe inyectar y algunos parámetros que se deben especificar durante la creación del objeto.

Ejemplo de docummentaiton es un RealPayment

public class RealPayment implements Payment { 
    @Inject 
    public RealPayment(
     CreditService creditService, 
     AuthService authService, 
     @Assisted Date startDate, 
     @Assisted Money amount) { 
    ... 
    } 
} 

Ver que CreditService y AuthService debe inyectarse por contenedor, pero startDate y cantidad debe ser especificada por un desarrollador durante la creación de la instancia.

Así que en lugar de inyectar una Payment se está inyectando un PaymentFactory con los parámetros que están marcados como @Assisted en RealPayment

public interface PaymentFactory { 
    Payment create(Date startDate, Money amount); 
} 

y una fábrica debe binded

install(new FactoryModuleBuilder() 
    .implement(Payment.class, RealPayment.class) 
    .build(PaymentFactory.class)); 

configurado de fábrica se puede inyectar en tus clases.

@Inject 
PaymentFactory paymentFactory; 

y utilizado en su código

Payment payment = paymentFactory.create(today, price); 
+6

Busqué mucho y no pude encontrar una explicación más concisa y clara para mi dudas. Muchas gracias – Gabber

+11

Esto es más fácil de entender que la documentación en Github. Bien hecho. – arjabbar

+5

La documentación de Github es una mierda en comparación con esto. – EMM