web-dev-qa-db-fra.com

Comment utiliser l'AssistantInjection de Guice?

J'ai lu https://github.com/google/guice/wiki/AssistedInject , mais il ne dit pas comment passer les valeurs des arguments AssistedInject. À quoi ressemblerait l'appel injector.getInstance ()?

77
Noel Yap

Vérifiez le javadoc de la classe FactoryModuleBuilder .

AssistedInject vous permet de configurer dynamiquement Factory pour la classe au lieu de la coder vous-même. Cela est souvent utile lorsque vous avez un objet qui a des dépendances qui doivent être injectées et certains paramètres qui doivent être spécifiés lors de la création de l'objet.

Un exemple de la documentation est un RealPayment

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

Vérifiez que CreditService et AuthService doivent être injectés par conteneur mais startDate et le montant doivent être spécifiés par un développeur lors de la création de l'instance.

Ainsi, au lieu d'injecter un Payment, vous injectez un PaymentFactory avec des paramètres marqués comme @Assisted dans RealPayment

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

Et une usine doit être liée

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

L'usine configurée peut être injectée dans vos classes.

@Inject
PaymentFactory paymentFactory;

et utilisé dans votre code

Payment payment = paymentFactory.create(today, price);
150
Mairbek Khadikov