J'ai lu https://github.com/google/guice/wiki/AssistedInject , mais il ne dit pas comment transmettre les valeurs des arguments AssistedInject. À quoi ressemblerait l'appel injector.getInstance ()?
84
J'ai lu https://github.com/google/guice/wiki/AssistedInject , mais il ne dit pas comment transmettre les valeurs des arguments AssistedInject. À quoi ressemblerait l'appel injector.getInstance ()?
Réponses:
Vérifiez le javadoc de la classe FactoryModuleBuilder .
AssistedInject
vous permet de configurer dynamiquement laFactory
classe au lieu de la 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 de la documentation est un
RealPayment
public class RealPayment implements Payment { @Inject public RealPayment( CreditService creditService, AuthService authService, @Assisted Date startDate, @Assisted Money amount) { ... } }
Voyez cela
CreditService
etAuthService
devrait être injecté par le conteneur, mais startDate et montant doivent être spécifiés par un développeur lors de la création de l'instance.Donc, au lieu d'injecter un,
Payment
vous injectez unPaymentFactory
avec des paramètres marqués comme@Assisted
dansRealPayment
public interface PaymentFactory { Payment create(Date startDate, Money amount); }
Et une usine devrait ê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
la source
RealPayment
n'a pas besoin de mettre en œuvre une interface.