3

次のように、@Injectプロパティと@SingletonプロパティでGoogleGuiceを使用しようとしています。

私は持っています:

  1. configure()空のメソッドを持つモジュール。
  2. インターフェイスIFoo
  3. @Singletonで注釈が付けられたクラスFoo(IFooを実装)、@Injectで注釈が付けられたパラメーターのないコンストラクター。これは、単一の注釈付きコンストラクターです。

クラス、コンストラクター、およびインターフェースはパブリックですが、それでも次のエラーが発生します。

IFooの実装はバインドされていません。

4

1 に答える 1

6

これを行うとエラーが発生するということですか?

IFoo foo = injector.getInstance(IFoo.class);

それでは、それは明らかです。が空の場合、configure()guiceはの依存関係を満たすクラスをどのように知る必要がありますかIFoo

configure()これをメソッドに追加するだけで、機能するはずです。これで、guiceは依存関係を満たすクラスを認識します。

bind(IFoo.class).to(Foo.class);

モジュールでこれを構成したくない場合は、インターフェースに注釈を付けることができます。例えば

@ImplementedBy(Foo.class)
public interface IFoo {
  ...
}

アノテーションは、クラスのリクエストが毎回新しいインスタンスを作成するのではなく、を@Singleton介して行われるたびに、クラスの同じインスタンス(シングルトンパターン)を返すようにguiceに指示するだけです。Injector.getInstance()ただし、これはクラスローダーごとではなく、インジェクターごとのシングルトンにすぎないことに注意してください。

于 2009-07-02T12:58:10.813 に答える