假设我有一个模块,其中一个绑定依赖于另一个:
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 中,我将简单地创建两个具有适当参数的提供程序方法,例如
fun provideSessionStorage(/*...*/): SessionStorage { /* ... */ }
fun provideOkHttpclient(sessionStorage: SessionStorage): OkHttpClient {
return OkHttpClient.Builder()
.addNetworkInterceptor(MyInterceptor(settingsStorage))
.build()
}
它会自行解决所有问题,并将适当的 sessionStorage 实例传递给第二个提供程序函数。
如何在牙签模块中实现相同的功能?