如何从不同模块中的一个 Kodein 模块访问实例?
How to access an instance from one Kodein module in a different module?
当使用 Kodein 时,如果我有 2 个模块并且 module B
需要使用来自 module A
的实例,最好的做法是将 module A
导入 module B
或有更好的方法吗?
比如我有一个networkingModule
:
val networkingModule = Kodein.Module("networking") {
bind<Retrofit>() with singleton {
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.build()
}
}
并且subscribersModule
需要来自networkingModule
的Retrofit实例:
val subscribersModule = Kodein.Module("subscribersModule") {
import(networkingModule)
bind<SubscribersService>() with singleton {
instance<Retrofit>().create(SubscribersService::class.java)
}
}
在 subscribersModule
中添加 import(networkingModule)
是最好的方法吗?
最后,如果你的模块在一个项目中使用,你不会强迫它们依赖。
相反,您可以将它们导入全局容器中,如下所示:
val applicationContainer = Kodein {
import(subscribersModule)
import(networkingModule)
// ...
}
Kodein-DI 会帮你解决依赖问题
当使用 Kodein 时,如果我有 2 个模块并且 module B
需要使用来自 module A
的实例,最好的做法是将 module A
导入 module B
或有更好的方法吗?
比如我有一个networkingModule
:
val networkingModule = Kodein.Module("networking") {
bind<Retrofit>() with singleton {
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.build()
}
}
并且subscribersModule
需要来自networkingModule
的Retrofit实例:
val subscribersModule = Kodein.Module("subscribersModule") {
import(networkingModule)
bind<SubscribersService>() with singleton {
instance<Retrofit>().create(SubscribersService::class.java)
}
}
在 subscribersModule
中添加 import(networkingModule)
是最好的方法吗?
最后,如果你的模块在一个项目中使用,你不会强迫它们依赖。
相反,您可以将它们导入全局容器中,如下所示:
val applicationContainer = Kodein {
import(subscribersModule)
import(networkingModule)
// ...
}
Kodein-DI 会帮你解决依赖问题