2011-09-24 3 views
1

나는 나눠 줄 라이브러리에 대해 파사드를 만들려고합니다. 제 외관에서 저는 Guice를 사용하여 객체 그래프를 만듭니다. 객체 그래프의 Deep은 getURL/setURL 메소드를 가진 Proxy 객체입니다. 제 생각에는 루트 객체를 만드는 데 사용 된 Proxy 인스턴스를 얻는 방법은 무엇입니까? 내 외관에 URL getter 및 setter가 있어야합니다. Guice 객체 그래프에서 객체 가져 오기

나는이 같은 시도 :

public class SomeThingFacade() { 

    private final SomeThing thing; 
    private final HTTPProxy proxy; 

    public SomeThingFacade() { 
     MyModule module = new MyModule(); 
     Injector injector = Guice.createInjector(module); 

     // this is the main class I'm making a facade for 
     this.thing = injector.getInstance(SomeThing.class); 

     // deep in the "thing" object graph is a Proxy implementation 
     this.proxy = injector.getInstance(HTTPProxy.class); 
    } 


    public void setURL(URL url) { 
     this.proxy.setURL(url); 
    } 
} 

을하지만 injector.getInstance는 새로운 인스턴스를 생성.

인 MyModule에 바인딩 :

bind(Proxy.class).to(HTTPProxy.class).asEagerSingleton(); 

내가 이전 외관 생성자에서 개체 그래프를 하드 코딩했다하지만 30 개체 unwieldly 얻었다.

기본적으로 객체 그래프를 생성 한 후에 객체 그래프를 깊게 구성해야하지만 어떻게 그 인스턴스를 유지할 수 있는지 잘 모르겠습니다.

답변

1

이것은 완전히 심각한 심각한 질문입니다. 그러나 나는 정확히 무엇이 요구되는지 알아낼 수 없다.

내 대답

, 코드를보고하고 fascaded 개체 그래프의 이야기를 무시하고 (그래서 나는 당신을 완전히 잘못 이해하는 경우 알려주세요)이다 thingSomeThingdeep internal proxy 어딘가에 따라
경우, 모듈을 구성해야합니다 것은 HTTPProxy에 묶여있다. 두 번째 getInstance은 첫 번째에 영향을주지 않습니다. 당신이 어떻게 든 할 수있는 유일한 방법은 proxything에 영향을 미칠 수있는 유일한 방법은 HTTPProxy가 in(Singleton.class)에 바인딩되어 있고 HTTPProxy의 멤버와 동작에 영향을 미치는 프록시의 메소드를 호출하여 동일한 인스턴스가 깊은 내부 일 것입니다. thing 너 찾고있어. 왜 이런 식으로하고 싶은지 모르겠다. 대신에 HTTPProxy을 구성하고 /거나 정당한 사용을 위해 특별한 모듈을 만드는 제공자를 작성하는 것을 고려하십시오.

+0

기본적으로 개체 그래프를 생성 한 후에 인스턴스를 깊게 구성해야하지만 어떻게 그 인스턴스를 유지할 수 있는지 잘 모르겠습니다. – kalithlev

+0

내가 싱글 톤이 아니면 않는 한, 당신이 정말로 그것을 잡을 수 없다는 암시를했다고 생각합니다. 인젝션을 사용하기 전에 객체를 인젝션하기 전에 설정해야합니다. 이 경우 모듈에서 http://code.google.com/p/google-guice/wiki/ProvidesMethods 개체 또는 http://code.google.com/p/google-providesMethods 개체에 대한 제공 방법을 정의해야합니다. guice/위키/ProviderBindings. 인스턴스 별 특수 효과 http://code.google.com/p/google-guice/wiki/BindingAnnotations가있을 수 있습니다. 그래서 당신의 facade가 proxy를위한 새로운 설정을 필요로한다면, 그것을하는 facade를위한 특정 모듈을 정의하십시오. – dlamblin

관련 문제