如何从不同模块中的一个 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 会帮你解决依赖问题