2012-05-09 4 views
1

私のプロジェクトでは、インターフェイスの具体的な実装を列挙した設定ファイルがあります。Guiceファイルから読み取られたクラス名に基づいてインスタンスを提供する

Guiceモジュールを設定して、インターフェイスが注入されるたびにタイプから具体的なクラスのインスタンスを取得できるようにするにはどうすればよいですか?

interface A{} 

class AImpl implements A{ @Inject public A(.....)} 

class B { 
    @Inject 
    public B(A a) {} 
} 


class MyModule extends AbstractModule { 
    ... 
    @Provides 
    public A getA(@ConfiguredClass String classname) { 
    Class<A> aClass = (Class<A>) Class.forName(classname); 
    // ??? 
    // this needs to be instantiated by Guice to fulfill AImpl's dependencies 
    return aClass.newInstance(); 
    } 
} 

config: 
class: my.package.AImpl 

答えて

2

あなたは、起動時に設定ファイルを読み込むMap<Class, Class>に変換し、モジュールにマッピングを供給し、そのようなすべてのバインディングを設定できます。

public class MyModule extends AbstractMdoule{ 

    //interface -> concrete 
    Map<Class, Class> implementsMap; 
    ... 
    public void configure() { 
     for (Map.Entry<Class, Class> implEntry : implementsMap.entrySet()) { 
      bind(implEntry.getKey()).to(implEntry.getValue()); 
     } 
    } 
} 
+0

+1を:と関連があります質問:http://stackoverflow.com/questions/765680/why-theres-no-configuration-file-at-all-for-dependency-injection-with-google-gu –

関連する問題