2016-09-16 2 views
1

나는 종속성 주입을 처음 사용했습니다. & Guice in Java. 나는 적당한 물체를 동적으로 주사하는데 문제가있다. 그것은 작동하지만 그것을 할 수있는 가장 좋은 생각이다Guice Dynamic Binding, 인스턴스 가져 오기

public class Main { 
    public static void main(String[] args) { 
     Injector injector = Guice.createInjector(new MyModule()); 

     StudentStore studentStore = injector.getInstance(StudentStore.class); 
     RegisterService registerService = injector.getInstance(RegisterService.class); 

     registerService.register("First User"); 
     registerService.register("Second User"); 

     //Now I would like to use OfflineRegisterService.class - is it good idea to do it here? 
     registerService = injector.getInstance(OfflineRegisterService.class); 

     registerService.register("Third User"); 
     registerService.register("Fourth User"); 

     System.out.println(studentStore.size()); 
    } 
} 

: 예를 들어

?

public class MyModule extends AbstractModule { 
    @Override 
    protected void configure() { 
     bind(StudentStore.class).to(MemoryStudentStore.class); 
     bind(RegisterService.class).to(OnlineRegisterService.class); 
    } 
} 
+0

저는 혼란 스럽습니다. 이것은 정적 코드처럼 보입니다. 속성 파일 (또는 비슷한)을 사용하여 사용자 1에서 4까지 명명 된 바인딩을 만든 다음 등록하려고하는 속성으로 RegisterService에 주석을 달고 생성자에서 수행합니다. – pandaadb

답변

1

Guice는 해결책이 좋습니다. 코드 가독성을 위해 오프라인 변수에 대한 새 로컬 변수를 만듭니다. 그래서 당신은 항상 당신이 사용하고있는 것을 압니다 :

public class Main { 
    public static void main(String[] args) { 
     Injector injector = Guice.createInjector(new MyModule()); 

     final StudentStore studentStore = injector.getInstance(StudentStore.class); // final prevents reassignment 
     // do some stuff 

     //Now I would like to use OfflineRegisterService.class - is it good idea to do it here? 
     final offlineRegisterService = injector.getInstance(OfflineRegisterService.class); // final too 

     offlineRegisterService.register("Third User"); 
     offlineRegisterService.register("Fourth User"); 

     System.out.println(studentStore.size()); 
    } 
} 
+0

답변 해 주셔서 감사합니다. 너 괜찮아. 더 나아질 수 있을까요? –

+0

당신이 가지고있는 정적 코드에 대해서는 이것이 완벽합니다. 실제 시나리오가 유용 할 수 있습니다. 예 : 테스트를 위해 다른 레지스터가 필요합니까? 구성에 따라 레지스터를 전환 하시겠습니까? –

+0

사용자 결정에 따라 레지스터를 전환하고 싶습니다. 온라인으로 등록하려면 (온라인으로 등록됩니다), 오프라인으로 등록하려면 (양식을 인쇄 할 수 있음). 이 상황을 닥칠 다음 인터페이스와 클래스를 만들어야합니까? –