如何在扩展函数中获取 Dagger2 class 属性?

How to get Dagger2 class property in extension function?

我正在使用 Dagger2,并且想在第三方的扩展函数中使用我的应用程序的版本字符串 class。该应用目前公开版本:

BuildConfigProvider.kt

interface BuildConfigProvider {

    val version: String

}

AndroidBuildConfigProvider.kt

class AndroidBuildConfigProvider @Inject constructor(
    context: Context
): BuildConfigProvider {

    override val version = BuildConfig.VERSION_NAME
}

AndroidModule.kt

@Module
class AndroidModule(private val app: Application) {

    @Provides
    @Singleton
    fun providesApplication(): Application = app

    @Provides
    @Singleton
    fun providesContext(): Context = app

    @Provides
    @Singleton
    fun providesBuildConfigProvider(provider: AndroidBuildConfigProvider)
            : BuildConfigProvider = provider


}  

我在不同的扩展函数中看到了这段代码并决定遵循该模式

private val mapper by lazy { DaggerGSONMapper.builder().build().mapper}

所以我创建了一个组件AndroidBuildConfigComponent

 @Component(
        modules = [
            AndroidModule::class
        ]
    )
    @Singleton
    interface AndroidBuildConfigComponent {
    
        val provider: BuildConfigProvider
    
    }

我将此代码添加到扩展函数 class 文件中:

private val configProvider by lazy { DaggerAndroidBuildConfigComponent.builder()
                                    .androidModule(AndroidModule(this)).build().provider }

但是,this 带有红色下划线并带有消息

this is not defined in the current context

有什么方法可以在扩展函数中获取应用程序上下文 class 来构建组件?

或者更一般地说,有没有办法从 AndroidBuildConfigProvider 获取信息到扩展函数中?

我发现 this article 谈论协程,但无法真正理解关键点。

第三方跟踪器 class.

的扩展代码 Class (TrackerExt.kt)
private val configProvider by lazy { DaggerAndroidBuildConfigComponent.builder()
                                    .androidModule(AndroidModule(this)).build().provider }
// Above has a compile error on `this`

fun Tracker.trackEvent(name: String) {
   Log.d("Name", name)
   Log.d("Version", configProvider.version)
}

看起来这个问题已经在 SO:

上被问过了

看看上面的答案对你有没有帮助。