使用来自Koin的inject()函数输入不匹配

时间:2018-01-18 14:29:02

标签: android dependency-injection kotlin

我在我的应用程序中使用了依赖注入框架Koin。以下代码行在我的MainActivity中完美运行:

private val auth: FirebaseAuth by inject()

不幸的是,同一行代码在自定义BroadcastReceiver中不起作用。 Android Studio标记“inject()” - 函数为红色并告诉我它是一个未解析的引用(导入“org.koin.android.ext.android.inject”被标记为未使用)。

当我尝试构建它时,我得到以下异常:

  

错误:(14,39)未解决的参考。以下候选人均不得   因接收器类型不匹配而适用:公共内联乐趣    ComponentCallbacks.inject(name:String = ...):   懒惰在org.koin.android.ext.android中定义

如何在此课程中完成注射工作?为什么它会失败?

1 个答案:

答案 0 :(得分:9)

您在活动中使用的inject方法定义为here,如下所示:

/**
 * inject lazily given dependency for Android component
 * @param name - bean name / optional
 */
inline fun <reified T> ComponentCallbacks.inject(name: String = "") 
    = lazy { (StandAloneContext.koinContext as KoinContext).get<T>(name) }

所以你可以在实现ComponentCallbacks接口的类中调用它 - 这些是应用程序组件,比如活动或服务。

如果您希望在BroadcastReceiver中以相同的方式使用Koin,您可以使用相同的实现在该类上定义另一个inject扩展名:

inline fun <reified T> BroadcastReceiver.inject(name: String = "") 
    = lazy { (StandAloneContext.koinContext as KoinContext).get<T>(name) }