2014-01-31 2 views
1

나는 mvc에 대해 잘 알고있다. 어떤 임에도 여전히 확실하지 않은 것은 google guice를 사용하여 종속성을 주입하는 방법입니다. 다음은 내 코드의 일부입니다.구글 guice MVC 관찰자 패턴 구현

protected void configure() { 
    bind(IAppController.class).to(AppController.class); 
    bind(IAppView.class).to(AppView.class); 
    bind(IAppModel.class).to(AppModel.class); 
} 

이제 종속성을 올바르게 삽입하는 방법을 잘 모르겠습니다. 이 문제를 해결하는 최선의 방법에 대해 의견을 묻고 싶습니다. 나는 작품 위의 지금이

public class AppController implements IAppController { 

private IAppView appView; 
private IAppModel appModel; 

@Inject 
public AppController(IAppView appView, IAppModel appModel){ 
    this.appModel = appModel; 
    this.appView = appView; 
} 

}

의 예처럼 생성자를 주입하지만 또 다른 문제를 추가합니다. 모델에 뷰의 인스턴스를 제공하려면 어떻게해야합니까? 내 관점은 관찰자이며 컨트롤러에 주입 된 뷰의 동일한 인스턴스가 모델에 주입되어야합니다. 내가 생각해 낸 또 다른 접근법은 인젝터를 사용하여 모델, 뷰, 컨트롤러의 인스턴스를 얻고 거기에 조립하는 것입니다. 예 :

내 마지막 접근 방식은 모델보기와 컨트롤러를 싱글 톤으로 사용하여 모든 주입 된 인스턴스가 동일하다는 것입니다. 임씨는 여전히 guice에 익숙하지 않으며 의존성을 다루는 방법을 아직 이해할 수 없습니다. 나는 또한 이것을 깔끔하게하고 싶기 때문에 연구하고있다. 이런 식으로 당신의 경험과 의견을 듣고 싶습니다. 고맙습니다.

답변

1

당신이 찾고있는 것이 "주사 방법"이라고 생각합니다. 주어진 종속성이 없으면 바인딩 프로세스가 실패합니다.

방법 주입 :

@Inject 
public void setView(View view) { 
    this.view = view; 
} 

또한 필드 주사를 사용할 수 있습니다. 하지만 리플렉션을 통해 종속성을 설정할 수만 있다면 유닛 테스트를 어렵게 작성하기 때문에 정말 좋아하지 않습니다.

필드를 주입 ​​:

@Inject 
private View view 

소스 : injections

+0

나는 그것에 대해 읽었습니다. 이제 모델 뷰 및 컨트롤러의 인스턴스를 만들 때 제대로 어셈블 할 수 있도록 충분한 리소스를 찾을 수 없습니다. 내 모델이 컨트롤러가받은 뷰의 동일한 인스턴스를 받겠습니까? 죄송합니다 guice 그냥 시작했다 – MykelXIII

+0

그것은 싱글 톤으로 인스턴스를 선언하려는 것처럼 들리 네요. 이것은 모듈을 통해 (바인딩을 만들 때) 또는 @Singleton 주석을 사용하여 수행 할 수 있습니다. Scopes : https://code.google.com/p/google-guice/wiki/Scopes –

+0

@Singleton 주석을 추가하지 않으면 guice가 종속성 삽입을 어떻게 처리합니까? – MykelXIII