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 );
}
}
答案 0 :(得分:4)
你只能注入一个人。
根据此课程的使用方式,您可以:
调用类如何创建一个或另一个实例?
这表明调用类需要多个MyDialog实例?然后你需要使用一个手工工厂(如果你只有一个ctor,Assisted Inject可以为你处理)。我不知道你要做什么的细节,我可能会重复你已经知道的但是作为一个空白的陈述我建议从MyDialog中提取一个界面并让工厂归还它们。这样你就可以在测试中伪造MyDialog。
答案 1 :(得分:1)
构造函数注入非常干净。 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
班级方法并提供所有注射。然后你在构造函数中执行相同的操作 - 将对象分配给类的属性。
答案 2 :(得分:0)
我同意之前的评论。 只是一个额外的提示:构造函数注入应该提供类所需的所有依赖项。正如mlk所说,一种方法可能是用大多数参数来注释构造函数,然后通过在需要的地方传递空值来重构另一个来调用前者。 此外,Guice 3.0支持所谓的构造函数绑定,它允许程序员指定要使用的构造函数。有关详细信息,请参阅here。