2011-10-18 11 views
0

私はGuiceを初めて使用していますが、この問題についてgoogleで検索しましたが、満足のいく回答が見つかりませんでした。Guice:パラメータ化されたコンストラクタを挿入する

public class X { 
    private Y y; 

    public X() { 
     y = new Y("abc", "xyz"); 
    } 
} 

public class Y { 
    private String str1; 
    private String str2; 

    public Y(String str1, String str2) { 
     this.str1 = str1; 
     this.str2 = str2; 
    } 
} 

は今、私は、クラスXのコンストラクタにYを注入したい

私はAssistedInjectを見つけたが、それはGuiceの、そのうちのいくつかによって を提供しているそのうちのいくつかのパラメータを持つコンストラクタのためではありません呼び出し元によって提供されます。

この場合、コンストラクタへのすべてのパラメータは、呼び出し側によってのみ提供されます。

どうすればいいですか?

答えて

1

私はAssistedInjectを見つけたが、それはGuiceのによって提供されており、そのうちのいくつかは、呼び出し側によって を提供しているそのうちのいくつか パラメータを持つコンストラクタのためではありません。

正しい。

ここで、この場合、コンストラクタへのすべてのパラメータは、呼び出し側によって に提供されます。

どうすればいいですか?

new Y(...)Xコンストラクタでこれを行うだけです。

なぜこの状況でGuiceを使用しますか?

2

あなたはこれがあなたに2つの同じ種類を明確にするための方法を提供しますGuice FAQ

に第一Qを参照してください、このために結合注釈(または組み込み@Named)を使用することができます。例えば、

// in the module 
bind(String.class).annotatedWith(Names.named("logical.env.id")).toInstance(System.getProperty("logical.env.id", "UK")); 

// in the class 
@Inject 
public Foo(Bar barInstance, @Named("logical.env.id") String logicalEnvId) { 
} 
関連する問題