这里完全是 Guice 菜鸟,已经阅读了几篇文章并观看了介绍视频,仅此而已。
这是我试图“guicifiy”的简化旧代码。不太清楚如何,因为(据我所知),我只能 @inject
-注释两个构造函数之一?调用类如何创建一个或另一个实例?或者我必须以某种方式重构它?
public class MyDialog extends JDialog {
public MyDialog( JFrame parent, <other parameters...> ) {
super( parent );
}
public MyDialog( JDialog parent, <other parameters...>) {
super( parent );
}
}
最佳答案
您只能注入(inject)一个 ctor。
根据此类的使用方式,您可以:
- 使用两个"new"方法将工厂注入(inject)客户端代码。
- 将所有参数滚动到一个构造函数中,并在不需要时传递 null。
How can a calling class create the one or the other instance?
这表明调用类将需要 MyDialog 的多个实例?然后你需要使用一个手工工厂(如果你只有一个ctor,辅助注入(inject)可以为你处理这个)。我不知道你在做什么的细节,我可能会重复你已经知道的内容,但作为空白声明,我建议还从 MyDialog 中提取一个接口(interface)并让工厂返回它们。这样你就可以在测试中伪造 MyDialog。
关于dependency-injection - 当有两个不同的构造函数时如何使用 Guice 进行注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1840643/