Cet exemple est tiré d'un livre sur Dependency Injection.Exemple d'injection partielle de Guice
Sur la page 87, il y a cet exemple.
public class NewsletterManager {
private final List<Recipient> recipients;
private final DelivererFactory factory; // The book notes this as injected
public NewsletterManager(List<Recipient> rs, DelivererFactory factory) {
this.recipients = rs;
this.factory = factory;
}
public void send(Newsletter letter) {
for (Recipient recipient : recipients) {
Deliverer d = factory.forLetter(letter);
d.deliverTo(recipient);
}
}
}
Je comprends ce que le code est censé faire, mais ce que je ne comprends pas comment instancier ou configurer mon Module
, afin que je puisse créer des instances de cette classe.
Il semble que le DelivererFactory
soit injecté. Les exemples ne disent pas comment, mais admettons que c'est à travers une injection de constructeur. Dans ce cas, comment passer l'instance List<Recipient>
qui est particulière à l'instance NewsletterManager
que je veux? Comment puis-je utiliser Guice pour instancier mon NewsletterManager
avec un DelivererFactory
configuré pour un module et une instance particulière List<Recipient>
? Ce que je ne comprends pas, c'est comment il peut y avoir à la fois des objets injectés automatiquement et des objets spécifiques à l'instance dans la signature du constructeur. Dans ce cas, je ne vois pas comment je peux obtenir une instance de NewsletterManager
ayant seulement mon List<Recipient>
. Dois-je compter sur une usine? Dans ce cas, ce qui est l'utilisation de l'injection DelivererFactory
, car je vais devoir injecter dans mon usine aussi ...
J'espère que ma question est assez claire ...