7

スパゲッティから Guice による依存性注入を使用するように変換したい Swing アプリケーションがあります。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

マルチバインディングを使用して、すべてのタブを としてバインドできますSetか? タブに使用する名前を取得できるインターフェイスが実装されている場合は、セットからタブを追加することをループできます。ただし、タブの順序に関しては、おそらく何かを理解する必要があります。

于 2010-04-13T18:31:59.803 に答える
0

JFrame にサービスを挿入して、タブにサービス / 構成を要求させることはできませんでしたか?

this.getTopLevelAncestor().getService()

もちろん、これはコンテナーに追加された後に呼び出された場合にのみ機能します。

于 2010-04-13T18:30:05.487 に答える