Dependency injection Guice部分注入示例

Dependency injection Guice部分注入示例,dependency-injection,guice,Dependency Injection,Guice,这个例子摘自一本关于 在第87页,有一个例子 public class NewsletterManager { private final List<Recipient> recipients; private final DelivererFactory factory; // The book notes this as injected public NewsletterManager(List<Recipient> rs, DelivererFact

这个例子摘自一本关于

在第87页,有一个例子

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

}
公共类时事通讯管理器{
私人最终名单接受者;
private final DeliverierFactory;//这本书将此作为注入内容
公共通讯经理(列表、送货工厂){
这是1.5卢比;
这个工厂=工厂;
}
公共无效发送(通讯信){
用于(收件人:收件人){
发货人d=工厂。用于信函(信函);
d、 交付人(接收人);
}
}
}
我理解代码的作用,但我不理解的是如何实例化或配置我的
模块
,以便创建此类的实例

似乎
deliverierfactory
已被注入。示例没有说明如何进行,但我们承认这是通过构造函数注入实现的。在这种情况下,如何传递我想要的
时事通讯管理器
实例所特有的
列表
实例?如何使用Guice实例化配置了模块的
DeliverFactory
和特定的
列表
实例的
时事通讯管理器

我不明白的是,如何在构造函数的签名中同时自动注入对象和特定于实例的对象。在这种情况下,我不知道如何获得只有我的
列表的
时事通讯管理器
的实例。我必须依赖工厂吗?在这种情况下,
deliverrfactory
injection有什么用,因为我也必须在我的工厂中注入它


我希望我的问题足够清楚…

你是对的,这种注射只能通过工厂来解决

如果您有
Foo(A,B)
,其中A在运行时被注入,B在运行时被传递,那么您将需要一个工厂
FooFactory.createFoo(B)
,该工厂内部保存对A的引用

幸运的是,Guice有@Assisted Injection的概念。您必须提供工厂的接口,但可以将实现的“魔力”留给Guice

它有很好的记录:

您将需要对com.google.inject.extensions»guice辅助注入的额外依赖项