ダガー2をテストしたところ、シングルトンアノテーションに関するいくつかの奇妙な動作があります。自分の問題を示すためにいくつかのテストコードを作成しました。複数のインスタンスでダガー2シングルトン
マイモジュール:
public interface ThingA {
void showMyId();
}
実装:ダガーを実行
public class ConcreteThingA implements ThingA {
@Override
public void showMyId() {
System.out.println(this);
}
}
はコード:
public void doStuff() {
ThingA thingA=DaggerThingAComponent.create().provideThingA();
ThingA thingB=DaggerThingAComponent.create().provideThingA();
System.out.println("Hello");
}
私はシングルトンにしたいものの
@Module
public class App {
@Provides
@Singleton
ThingA provideThingA(){
return new ConcreteThingA();
}
}
インタフェース
ここでは、2回質問したときに同じインスタンスが取得されないことを示すスクリーンショットです。私は何か基本的なことを逃したのですかThingAは単なる愚かな名前であり、私の実際のアプリケーションでは、私のサービスでこのシングルトンの動作をしたいと考えています。
何 'DaggerThingAComponent.create()'のように見えるんガイド?あなたはコンポーネントインスタンスをキャッシュしているのですか、それともそれぞれの呼び出しで新しいインスタンスを作成していますか? –
@EgorNあなたはそれを釘付けにしました。 Daggerはコンポーネントの存続期間内にシングルトンの動作を強制するため、2つのコンポーネントを作成することは、それぞれ独自のシングルトンを持つ2つのアプリケーションを作成することと同じです。 –