2011-10-04 7 views
0

注入された実装は、実行時まで知られていないものに基づいて変更したいと考えています。具体的には、リクエストが実行されるまで「バージョン」が決定されない異なるバージョンとして動作するようにしたいと思います。また、「バージョン」は要求ごとに異なる可能性があります。Google Guiceと実行時のさまざまな注入

ドキュメントを読んだ後は、「バージョン」に基づいて実行時に実装を選択する必要がある場合にプロバイダを実装できるようです。さらに、私はジュースの上に自分自身をロールバックすることができます。

このシナリオでは、プロバイダを実装するのが最善の方法ですか?私はベストプラクティスがあるかどうか、またはそこに他の誰かがGuiceを使ってこの問題に取り組もうとしているかどうかを知りたい。

ありがとうございました!

-Joe

+1

どのようにして、「バージョン」-informationを実装することを計画していますか?メソッドパラメータ?注釈? –

答えて

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)); 

} 
関連する問題