7

我有一个 Swing 应用程序,我想将它从意大利面条转换为使用 Guice 的依赖注入。使用 Guice 提供配置和任务队列等服务非常棒,但我现在开始使用应用程序的 GUI 并且不确定如何继续。

该应用程序基本上是JFrame一个在JTabbedPane. 每个选项卡都是一个单独的JPanel子类,它列出了各种组件并需要服务来在按下某些按钮时执行操作。

在当前的应用程序中,这看起来有点像这样:

@Inject
public MainFrame(SomeService service, Executor ex, Configuration config) {
    tabsPane = new JTabbedPane();

    // Create the panels for each tab and add them to the tabbedpane
    somePanel = new SomeTabPanel(service, ex, config);
    tabsPane.addTab("Panel 1", somePanel);

    someOtherPanel = new SomeOtherTabPanel(service, ex, config);
    tabsPane.addTab("Panel 2", someOtherPanel);

    ... do more stuff
}

显然,这并不完全遵循 DI 最佳实践。我不想@Inject使用选项卡,因为这会给我一个带有几十个参数的构造函数。我确实想使用 Guice 将所需的依赖项注入到我需要的任何选项卡对象中,而不必将所有这些依赖项传递给选项卡构造函数。

选项卡对象的所有依赖项都是我Module知道的服务,所以基本上想做的就是向 Guice 询问所需的对象并为我构建它们。

4

2 回答 2

3

您可以使用Multibinding将所有选项卡绑定为Set吗?如果他们实现了一些允许您获取用于选项卡的名称的接口,那么您可以循环添加集合中的选项卡。不过,就订购标签而言,您可能需要弄清楚一些事情。

于 2010-04-13T18:31:59.803 回答
0

难道你不能只在 JFrame 中注入服务并让选项卡询问服务/配置,就像这样

this.getTopLevelAncestor().getService()

当然,这仅在将它们添加到容器后调用才有效。

于 2010-04-13T18:30:05.487 回答