繁体   English   中英

如何在 Kodein 或 Koin 中注入活动或片段之外的依赖项?

[英]how to inject dependency outside activity or fragment in Kodein or Koin?

想要使用 Kodein DI Android 在非活动或片段类中初始化接口

示例仅显示在活动中使用 Kodein 的热度,而在其他部分则不然

 class MainViewModel() :  KodeinAware{
   override val kodein by closestKodein()
   val repository : Repository by instance()
 }

在活动中它有效,但在其他类中它显示错误。 我想在另一个类中初始化接口

closestKodein仅适用于 Android Context感知类(例如片段和活动)。 要在这些类之外使用它,您需要一个 Android context

android 文档明确指出:

注意:ViewModel 绝不能引用视图、生命周期或任何可能持有对活动上下文的引用的类。

[...]

如果 ViewModel 需要 Application 上下文,例如查找系统服务,它可以扩展AndroidViewModel类并在构造函数中有一个接收 Application 的构造函数,因为 Application 类扩展了 Context。

因此,要从 ViewModel 访问 Kodein:

class MainViewModel(app: Application) : ApplicationViewModel(app), KodeinAware {
    override val kodein = app.kodein
    val repository : Repository by instance()
}

Simpy 将上下文或活动作为参数传递

override val kodein by closestKodein(context)

更多信息https://kodein.org/Kodein-DI/?5.0/android#_getting_a_kodein_object

在任何地方使用它。 appKodein是全局函数。

val dataLayer: DataLayer = appKodein().instance()

override val kodein by kodein(activity!!)

class ReportViewModel(context: Context):ViewModel() ,KodeinAware
{
override val kodein by kodein(context)
val reportRepository:ReportRepository by instance()
}

我的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM