2012-03-27 7 views
1

私はクラスにプロバイダメンバを持ちたいと思います。どうやってやるの?私はgetを呼び出すたびに新しいオブジェクトを返すプロバイダを作成できますか?

public class GuiceInjectionTest 
{ 
    @Inject 
    Provider<MyClass> provider; 

    public Provider<MyClass> get() 
    { 
    //I want a new instance every time here that is injected by guice 
    return provider.get() 
    } 
} 

注私は、この新しいインスタンスは、Guiceので注入することにしたいので、私はちょうどプロバイダの実装でnew MyClass()を作成傾けます。あなたはMyClass.class

@Inject 
Injector injector; 

... 
return injector.newInstance(MyClass.class); 

をインジェクターを注入して、新しいインスタンスを要求することができ、あなたのプロバイダで

bind(MyClass.class).toProvider(MyClassProvider.class); 

しかし、あなたがすることもでき、単に:

答えて

10

@ GuillaumePoletのソリューションは動作しますが、これを行うにはそれほど好ましい方法ではありません。バインドMyClassは正しいですが、Injectorを注射するべきではありません(一般にInjectorを注射しないでください)。

注射できるタイプの場合、Guiceは自動的にそのタイプのProviderを注射することができます。私は第二の溶液をしようと、それが動作

​​
1

次のコードを使用して、プロバイダをバインドすることができますあなたのクラスをバインドする:

bind(MyClass.class); 

どのようにあなたのプロバイダを使用する)

+1

:だから何あなたがすべきことはこれです!ありがとうございました! – oshai

関連する問題