Eu li https://github.com/google/guice/wiki/AssistedInject , mas não diz como passar os valores dos argumentos AssistedInject. Qual seria a aparência da chamada injector.getInstance ()?
Eu li https://github.com/google/guice/wiki/AssistedInject , mas não diz como passar os valores dos argumentos AssistedInject. Qual seria a aparência da chamada injector.getInstance ()?
Respostas:
Verifique o javadoc da classe FactoryModuleBuilder .
AssistedInjectpermite que você configure dinamicamente Factorypara a classe em vez de codificá-la sozinho. Isso geralmente é útil quando você tem um objeto que possui dependências que devem ser injetadas e alguns parâmetros que devem ser especificados durante a criação do objeto.
O exemplo da documentação é um RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
Veja isso CreditServiceeAuthService deve ser injetado pelo contêiner, mas startDate e amount devem ser especificados por um desenvolvedor durante a criação da instância.
Então, em vez de injetar um, Paymentvocê está injetando um PaymentFactorycom parâmetros marcados como @AssistedemRealPayment
public interface PaymentFactory {
Payment create(Date startDate, Money amount);
}
E uma fábrica deve ser ligada
install(new FactoryModuleBuilder()
.implement(Payment.class, RealPayment.class)
.build(PaymentFactory.class));
Fábrica configurada pode ser injetada em suas aulas.
@Inject
PaymentFactory paymentFactory;
e usado em seu código
Payment payment = paymentFactory.create(today, price);
RealPaymentnão precisa implementar uma interface.