我在我的应用程序中使用了依赖注入框架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中定义
如何在此课程中完成注射工作?为什么它会失败?
答案 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) }