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 ()?
85
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 dinamicamenteFactory
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 umPaymentFactory
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
fonte
RealPayment
não precisa implementar uma interface.