1
Iはその中の1つの結合モジュールを持っていると仮定し、別に依存する:ここToothpickの同じモジュールから依存関係のインスタンスを渡すには?
class MyModule : Module(){
init {
bind(SettingsStorage::class.java).to(PreferencesBasedSettingsStorage::class.java)
// how to use createOkHttpClient here?
// how to get instance of SettingsStorage to pass to it?
bind(OkHttpClient::class.java).to?(???)
}
private fun createOkHttpClient(settingsStorage: SettingsStorage): OkHttpClient {
return OkHttpClient.Builder()
.addNetworkInterceptor(MyInterceptor(settingsStorage))
.build()
}
}
Iのみ即ちSettingsStorage
、別の結合のインスタンスを有するOkHttpClient
を作成することができます。しかし、それを行う方法?
現在、私は、私は単に
fun provideSessionStorage(/*...*/): SessionStorage { /* ... */ }
fun provideOkHttpclient(sessionStorage: SessionStorage): OkHttpClient {
return OkHttpClient.Builder()
.addNetworkInterceptor(MyInterceptor(settingsStorage))
.build()
}
など適切な引数を持つ2つのプロバイダのメソッドを作成しただろうダガーでcreateOkHttpClient()
にそれを渡すためにモジュール内結合SettingsStorage
のインスタンスを取得する方法を参照してくださいませんそれ自身ですべてを把握し、sessionStorageの適切なインスタンスを2番目のプロバイダ関数に渡します。
どのようにToothpickモジュール内で同じことを達成するには?
カスタムプロバイダクラスを使用してこれを行う方法があることがわかりました(私は質問を投稿した後:))。このように@Injectを置くと、Toothpickはこの場合にフィールド注入を自動的に行います。手動でToothpick.inject()を呼び出す必要はありませんか?私は別のオプションがコンストラクタの注入を使用するだろうと思います。 – dimsuz
プロバイダはTPに自動的に挿入されます。 – Snicolas