あるバインディングが別のバインディングに依存するモジュールがあるとします。
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()
}
}
ここで作成できるOkHttpClient
のは、別のバインディングのインスタンス、つまりSettingsStorage
. しかし、それを行う方法は?
SettingsStorage
現在、モジュール内のバインディングのインスタンスを取得して渡す方法がわかりませんcreateOkHttpClient()
Dagger では、次のような適切な引数を持つ 2 つのプロバイダー メソッドを単純に作成します。
fun provideSessionStorage(/*...*/): SessionStorage { /* ... */ }
fun provideOkHttpclient(sessionStorage: SessionStorage): OkHttpClient {
return OkHttpClient.Builder()
.addNetworkInterceptor(MyInterceptor(settingsStorage))
.build()
}
そして、それ自体ですべてを把握し、sessionStorage の適切なインスタンスを 2 番目のプロバイダー関数に渡します。
Toothpick モジュール内で同じことを達成するにはどうすればよいですか?