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);
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/