Home Articles

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

Asked
Viewed 10 times
4

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

private val auth: FirebaseAuth by inject()

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

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

错误:(14,39)未解决的参考 . 由于接收器类型不匹配,下列候选者都不适用:public inline fun ComponentCallbacks.inject(name:String = ...):org.koin.android.ext.android中定义的Lazy

如何在这个类中进行注射,为什么它会失败?

1 Answer

  • 7

    您在活动中使用的 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) }
    

Related