Dependency injection 当存在两个不同的构造函数时,如何使用Guice注入?

Dependency injection 当存在两个不同的构造函数时,如何使用Guice注入?,dependency-injection,guice,Dependency Injection,Guice,Total Guice noob在这里,已经阅读了一些文章并观看了介绍视频,仅此而已 这是我的简化旧代码,我正在尝试“guicifiy”。我不太明白怎么做,因为(据我所知),我只能@inject-注释两个构造函数中的一个?调用类如何创建一个或另一个实例?还是我必须以某种方式重构它 public class MyDialog extends JDialog { public MyDialog( JFrame parent, <other parameters...> ) {

Total Guice noob在这里,已经阅读了一些文章并观看了介绍视频,仅此而已

这是我的简化旧代码,我正在尝试“guicifiy”。我不太明白怎么做,因为(据我所知),我只能
@inject
-注释两个构造函数中的一个?调用类如何创建一个或另一个实例?还是我必须以某种方式重构它

public class MyDialog extends JDialog {
    public MyDialog( JFrame parent, <other parameters...> ) {
        super( parent );
    }

    public MyDialog( JDialog parent, <other parameters...>) {
        super( parent );
    }
 }
公共类MyDialog扩展JDialog{
公共MyDialog(JFrame父对象,){
超级(家长);
}
公共MyDialog(JDialog父级){
超级(家长);
}
}

您只能注入一个ctor

根据此类的使用方式,您可以:

  • 使用两个“新”方法将工厂注入到客户机代码中
  • 将所有参数滚动到一个ctor中,并在不需要时传递null
调用类如何创建一个或另一个实例


这表明调用类需要MyDialog的多个实例?然后,您需要使用手动轧制工厂(如果您只有一个ctor,辅助注射可以为您处理此问题)。我不知道你在做什么的细节,我可能会重复你已经知道的,但作为一个空白声明,我建议也从MyDialog中提取一个接口,让工厂返回它们。通过这种方式,您可以在测试中伪造MyDialog。

构造函数注入非常干净。mlk是正确的,它说您只能注入一个构造函数

您可以使用方法注入:

public class Smt {

    private int a;
    private Cereal cereal;
    private Personality personality;
    private ignition;

    public Smt() {
        this.a = 5;
    }

    public Smt(int a) {
        this.a = a;
    }

    @Inject
    public void setup(@CiniMini Cereal cereal, @Rastafarian Personality personality,
        Ignition ignition) {
        this.cereal = cereal;
        this.personality = personality;
        this.ignition = ignition;
    }
}

Guice将要做的是调用类“
setup
class方法并提供所有注入。然后执行与构造函数中相同的操作——将对象分配给类的属性。

我同意前面的评论。 还有一个提示:构造函数注入应该提供类所需的所有依赖项。正如mlk所说,一种方法可以是使用大多数参数对构造函数进行注释,然后重构另一种方法,通过在需要时传递null值来调用前者。
此外,Guice 3.0支持所谓的构造函数绑定,允许程序员指定要使用的构造函数。有关详细信息,请参阅。