我正在使用 Dagger2,并且想在第三方类的扩展函数中使用我的应用程序的版本字符串。该应用程序目前公开版本:
BuildConfigProvider.kt
interface BuildConfigProvider {
val version: String
}
AndroidBuildConfigProvider.kt
class AndroidBuildConfigProvider @Inject constructor(
context: Context
): BuildConfigProvider {
override val version = BuildConfig.VERSION_NAME
}
安卓模块.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
}
我将此代码添加到扩展函数类文件中:
private val configProvider by lazy { DaggerAndroidBuildConfigComponent.builder()
.androidModule(AndroidModule(this)).build().provider }
但是, this
带有红色下划线的消息
这在当前上下文中没有定义
有什么方法可以在扩展函数类中获取应用程序上下文来构建组件?
或者更一般地说,有没有办法从 AndroidBuildConfigProvider 获取信息到扩展函数中?
我发现这篇文章谈论协程但无法真正理解大头钉。
第三方 Tracker 类的扩展类 (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)
}