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 .
AssistedInject
permite que você configure dinamicamente Factory
para 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 CreditService
eAuthService
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, Payment
você está injetando um PaymentFactory
com parâmetros marcados como @Assisted
emRealPayment
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);
RealPayment
não precisa implementar uma interface.