android - Kodein 返回一个新实例而不是单例
问题描述
我是 Kodein 的新手,我有这个简单的模块:
import com.myapp.MyApplication.Companion.INSTANCE
import com.facebook.flipper.android.AndroidFlipperClient
import com.facebook.flipper.core.FlipperClient
import com.facebook.flipper.plugins.inspector.DescriptorMapping
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin
import io.ktor.client.HttpClient
import io.ktor.client.engine.okhttp.OkHttp
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import org.kodein.di.Kodein
import org.kodein.di.generic.bind
import org.kodein.di.generic.instance
import org.kodein.di.generic.singleton
const val FLIPPER_MODULE_TAG = "FLIPPER_MODULE_TAG"
val flipperModule = Kodein.Module(FLIPPER_MODULE_TAG) {
bind<NetworkFlipperPlugin>() with singleton {
NetworkFlipperPlugin()
}
bind<FlipperClient>() with singleton {
val networkFlipperPlugin: NetworkFlipperPlugin = instance()
val client: FlipperClient = AndroidFlipperClient.getInstance(INSTANCE.baseContext)
val inspectorFlipperPlugin =
InspectorFlipperPlugin(INSTANCE, DescriptorMapping.withDefaults())
client.addPlugin(networkFlipperPlugin)
client.addPlugin(inspectorFlipperPlugin)
client
}
bind<HttpClient>() with singleton {
val logging = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
val networkFlipperPlugin: NetworkFlipperPlugin = instance()
val okHttpClientInstance = OkHttpClient.Builder().addNetworkInterceptor(FlipperOkhttpInterceptor(networkFlipperPlugin)).build()
val httpClient = HttpClient(OkHttp) {
engine {
addInterceptor(logging)
preconfigured = okHttpClientInstance
}
}
httpClient
}
}
问题是
val networkFlipperPlugin: NetworkFlipperPlugin = instance()
总是返回一个新实例而不是单例(实际上我所有的单例每次检索它们时都会返回一个新实例)
有什么线索吗?非常感谢 !
解决方案
我忽略了我活动中的一段代码:
override val kodein: Kodein by retainedKodein {
extend(parentKodein, copy = Copy.All)
}
正如我所说,我是 Kodein 的新手 :)
推荐阅读
- python - Tabula-py:输出文件为空
- mysql - 遍历一个json数组mysql 8
- python - 动态优化需要帮助:错误消息:通过的 f0 在优化算法中具有多于 1 个维度
- java - Spring Security 加密密码问题
- c# - 如何将此 SQL 转换为 LINQ?
- python - 转置和重塑究竟是如何工作的?
- opencv - 使用 ML 中的特征提取方法将灰度图像转换为彩色图像
- react-native - 在 Mac OS Catalina 上安装 Watchman 无法使用 Home brew
- wpf - 为什么我点击按钮后左眼不再眨眼
- c# - C# WPF TextBox 对文本更改的调用方法