3

Dagger にシングルトンを注入させることは可能ですか?

現状では、依存関係をシングルトンに手動で提供する方法しか見つけられませんでした。

@Provides
@Singleton
public Dispatcher providesDispatcher(Context context, PPreferences preferences,
                                                       FileNameCache fileNameCache) {
    return new Dispatcher(context, preferences, fileNameCache);
}

これがシングルトンを定義する唯一の方法ですか? 私がやりたいのは、次のようなもので、Dagger が依存関係自体を注入するようにすることですが、そうするとエラーが発生します。

@Provides
@Singleton
public Dispatcher providesDispatcher(Dispatcher dispacher) {
    return dispacher;
}

おそらく、他のシングルトンを挿入できるようにするシングルトンを定義する別の方法がありますか?

どんな助けでも大歓迎です。

編集: 別のシングルトンで2番目のアプローチを行っていることに気付きましたが、実装をインターフェイスにマッピングしているため、少し異なるケースです:

@Provides
@Singleton
public Tracker providesTracker(TrackerImpl tracker) {
    return tracker;
}

TrackerImpl には、上記の PPreferences のインスタンスも注入されます。

2 番目の例で Dispatcher を作成しようとすると、次のエラーが表示されます。

error: Unknown error java.lang.IllegalStateException thrown by javac in graph validation: Dependency cycle:
0. com.example.test.Dispatcher bound by @Singleton/ProviderMethodBinding[provideKey="com.example.test.Dispatcher", memberskey="null"]
0. com.example.test.Dispatcher
4

1 に答える 1