2016-09-16 8 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

あなたの解決策は問題ありません。コードを読みやすくするために、オフラインの新しいローカル変数を作成します。だから、あなたはいつあなたが使用しているのかを知っているでしょう:

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

私はユーザの判断に基づいてレジスタを切り替える必要があります。彼がオフラインで登録したいのであれば(彼はオンラインで登録されます)オンラインで登録したい場合(フォームを印刷することができます)。私はこの状況を管理する次のインターフェースとクラスを作るべきですか? –

関連する問題