86 votes

Comment utiliser l'injection assistée de Guice ?

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

0 votes

Connexes, les réponses ci-dessous ne couvrent pas les cas où un même type est utilisé plusieurs fois. stackoverflow.com/questions/23553865/

179voto

Mairbek Khadikov Points 3775

Consultez la javadoc de FactoryModuleBuilder classe.

AssistedInject vous permet de configurer dynamiquement Factory pour la classe au lieu de le coder vous-même. Ceci 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 tiré de la documentation est un RealPayment

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

Voir que CreditService y AuthService doit être injecté par le 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 qui sont marqués comme @Assisted sur 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));

La fabrique configurée peut être injectée dans vos classes.

@Inject
PaymentFactory paymentFactory;

et utilisé dans votre code

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

8 votes

J'ai beaucoup cherché et je n'ai pas trouvé d'explication plus concise et plus claire à mes doutes. Merci beaucoup.

20 votes

C'est plus facile à comprendre que la documentation sur Github. Bien joué.

9 votes

La documentation de Github est merdique comparée à celle-ci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X