2010-04-13 6 views
7

스파이웨어에서 Guice로 종속성 주입을 사용하려는 스윙 응용 프로그램이 있습니다. Guice를 사용하여 구성 및 작업 대기열과 같은 서비스를 제공하는 것은 좋지만 이제는 응용 프로그램의 GUI를 시작하고 진행 방법을 확신 할 수 없습니다.Swice 응용 프로그램에서 Guice를 사용하는 방법

응용 프로그램은 기본적으로 JTabbedPane에 여러 개의 탭이있는 JFrame입니다. 각 탭은 다양한 구성 요소를 배치하고 특정 버튼을 눌렀을 때 작업을 수행하는 서비스가 필요한 별도의 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를 사용하여 필요한 종속성을 탭 생성자에게 전달하지 않고 필요한 탭 객체에 필요한 종속성을 주입하려고합니다.

탭 개체에 대한 종속성의 모든

그래서 기본적으로 모든 나는 내가하고 싶은 필요한 개체에 대한 Guice을 부탁하고 나를 위해 건설 한 생각 , 내 Module가 알고있는 서비스입니다.

+0

내가 소유하고있는 Guts-GUI 프로젝트를 살펴볼 수 있습니다. 이것은 Swing 응용 프로그램을 작성하기위한 Guice 기반 프레임 워크입니다. 아직 공식적으로 발표되지는 않았지만 현재로서는 상당히 효과적입니다. URL은 다음과 같습니다. http://kenai.com/projects/guts/pages/Guts-gui – jfpoilpret

+0

간단히 살펴 봤지만 응용 프로그램을 완전히 다시 작성해야합니다. 저는 이미 매우 강력한 작업 실행 시스템과 이벤트 버스를 가지고 있습니다. 신청서는 크지 않지만 (약 20kloc), 시작을 고려하지 않을만큼 충분히 크다. –

답변

3

Multibinding을 사용하여 모든 탭을 Set으로 바인딩 할 수 있습니까? 탭에 사용할 이름을 얻을 수있는 인터페이스를 구현 한 경우에는 세트에서 탭을 추가하는 과정을 반복 할 수 있습니다. 당신은 아마 탭을 주문하는 것까지 뭔가를 알아 내야 할 것입니다.

+0

가능성을 생각합니다. Multibinding은 당신이 얻으려고하는 대상의 양이나 실제 유형을 모르는 경우에만 존재한다고 믿었습니다. 이 경우 정확히 얼마나 많은 유형이 있는지 알고 있으며 수동으로 구성하고 싶지는 않습니다. 그래서 Multibinding이 내가하고 싶은 것을 충분히 매칭시킬 수 있다고 생각하지 않았습니다. –

+0

@ColinD에 동의합니다. +1 멀티 바인드 – gpampara

0

당신은 단지 JFrame의에서 서비스를 주입하고, 탭들이 컨테이너에 추가 된 후에 호출하면 물론 너무

this.getTopLevelAncestor().getService() 

이 유일한 작품처럼, 서비스/구성에 대해 물어 보자 수 없습니다 .

+2

나는 그것이 스파게티를 더욱 악화시킬 것이라고 생각한다. 'MainFrame'에 많은 양의 캐스트를 추가 할 것이고 실제로는 현재와 같은 의존성 대신에'MainFrame'에 단단히 결합 될 것이므로 실제로 이러한 클래스의 재사용 가능성을 줄입니다. –

관련 문제