Kotlin扩展属性在某些应用程序模块中被识别,而在其他应用程序模块中则未被识别

问题描述 投票:0回答:1

我正在为我的模块化android应用程序(具有4个模块)进行应用程序扩展。我正在使用以下实用程序代码来初始化应用程序扩展:

class ApplicationLazy<out T>(private val initializer: Application.() -> T) : ReadOnlyProperty<Application, T> {
   private var value: T? = null

   override fun getValue(thisRef: Application, property: KProperty<*>): T =
     (value ?: initializer(thisRef).also {
      value = it
   })
 }

 fun <T : Any> appLazy(initializer: Application.() -> T) = ApplicationLazy(initializer)

并且在一个模块(称为核心)中,我这样定义数据库:

val Application.db by appLazy {
   Database(
     AndroidSqliteDriver(Database.Schema, this, "luminary.db"),
     HomeItemDto.Adapter(SectionIdColumnAdapter, EnumColumnAdapter(), EnumColumnAdapter()),
     HomeSectionDto.Adapter(SectionIdColumnAdapter, EnumColumnAdapter()),
     MediaItem.Adapter(MediaIdColumnAdapter, LocalDateTimeColumnAdapter, LocalDateTimeColumnAdapter)
   )
}

我可以在我的四个模块中的任何地方“看到”,而不仅仅是“核心”模块。 (正在执行Application.db)显示在我在Android Studio中的选择列表中。但是,在另一个模块(称为audioplayer)中,我正在这样定义Exoplayer DataManager:

val Application.downloadManager: DownloadManager by appLazy {
  val downloadIndex = DefaultDownloadIndex(databaseProvider)
  upgradeActionFile(DOWNLOAD_ACTION_FILE, downloadIndex, false)
  upgradeActionFile(DOWNLOAD_TRACKER_ACTION_FILE, downloadIndex, true)
  val downloaderConstructorHelper = DownloaderConstructorHelper(downloadCache, dataSource(this, 
  SwaggerApiClient.userAgent))
  DownloadManager(this, downloadIndex, DefaultDownloaderFactory(downloaderConstructorHelper)).apply {
    requirements = Requirements(Requirements.NETWORK_UNMETERED)
  }
}

我在编译时在另一个模块中调用application.downloadManager,编译器抱怨并说这是一个未解决的引用。为什么在一个模块而不是另一个模块中定义此方法有效?

编辑这是调用此扩展的模块的依赖关系。

dependencies { //core
api project(":network")
}

dependencies { //app
}

dependencies { //network
}

dependencies { //audioplayer
  implementation project(':core')
}
android kotlin-android-extensions
1个回答
0
投票

您必须添加包含扩展名的模块作为要使用它的模块的依赖项。

因此,假设扩展名application.downloadManager在模块:audioplayer中,您应该在需要该扩展名的模块中将依赖项与:audioplayer添加在一起。

© www.soinside.com 2019 - 2024. All rights reserved.