2011-10-04 4 views
0

실행하기 전까지는 알려지지 않은 것을 기반으로 주입 된 구현을 변경하고 싶습니다. 특히, 요청이 실행될 때까지 "버전"이 결정되지 않은 다른 버전으로 작동하도록 앱을 원합니다. 또한 "버전"은 요청마다 다를 수 있습니다.Google Guice 및 다양한 주사를 런타임에 수행

문서를 읽은 후 "버전"을 기반으로 런타임에 구현을 선택해야하는 경우 공급자를 구현할 수있는 것처럼 보입니다. 또한, 나는 주스의 위에 나의 것을 굴릴 수 있었다.

이 시나리오에서 가장 좋은 방법은 공급자를 구현하고 있습니까? 나는 최선의 관행이 있는지, 아니면 다른 사람들이이 문제를 해결하기 위해 Guice를 사용하려고 시도했는지 알고 싶습니다.

도움 주셔서 감사합니다.

- 조은

+1

어떻게 당신이 "버전"- 정보를 구현할 계획입니까? 메소드 매개 변수? 특수 효과? –

답변

0

나는 버전이 런타임에만 알 수 있다면, 당신은 수동으로 지정 공급자와 버전이 "서비스"를 제공해야한다고 생각합니다. 이 같은 아마 뭔가 :

@Singleton 
public abstract class VersionedProvider<T, V> { 

    private Map<V, T> objects; 

    T get(V version) { 
     if (!objects.containsKey(version)) { 
      objects.put(version, generateVersioned(version)); 
     } 
     return objects.get(version); 
    } 

    // Here everything must be done manually or use some injected 
    // implementations 
    public abstract T generateVersioned(V version); 
} 
0
public class MyRuntimeServiceModule extends AbstractModule { 
    private final String runTimeOption; 

    public ServiceModule(String runTimeOption) { 
    this.runTimeOption = runTimeOption; 
    } 

    @Override protected void configure() { 

    Class<? extends Service> serviceType = option.equals("aServiceType") ? 
     AServiceImplementation.class : AnotherServiceImplementation.class; 
    bind(Service.class).to(serviceType); 
    } 
} 

    public static void main(String[] args) { 
    String option = args[0]; 
    Injector injector = Guice.createInjector(new MyRuntimeServiceModule(option)); 

} 
관련 문제