我开始将Dagger应用程序迁移到Hilt,首先将AppComponent转换为Hilt自动生成的ApplicationComponent。因此,我向与此组件相关的每个模块添加了@InstallIn(ApplicationComponent::class)
注释。
现在出现以下错误:
错误:[暂停]所有模块必须是静态的,并使用静态配置 方法或具有可见的无参数构造函数。
它指向此模块:
@InstallIn(ApplicationComponent::class)
@Module
class AccountModule(private val versionName: String) {
@Provides
@Singleton
fun provideComparableVersion(): ComparableVersion {
return ComparableVersion(versionName)
}
}
以前在Dagger中,可以在构造函数中传递参数。看起来Hilt不允许这样做。
如何将参数传递给Hilt模块?
答案 0 :(得分:1)
不幸的是,目前Dagger Hilt是使用整体组件设计的,该组件仅自动生成一个应用程序组件和一个活动组件。请参阅https://dagger.dev/hilt/monolithic.html
因此,其模块必须是静态的,并使用静态提供方法或具有可见的无参数构造函数。
如果将参数放入模块中,它将指出错误
[Hilt] All modules must be static and use static provision methods or have a visible, no-arg constructor.
根据我的理解,您将尝试获取BuildInfo版本号,也许最简单的方法是使用如下提供的BuildInfo.VERSION_NAME
。
@InstallIn(ApplicationComponent::class)
@Module
class AccountModule() {
@Provides
@Singleton
fun provideComparableVersion(): ComparableVersion {
return ComparableVersion(BuildInfo.VERSION_NAME)
}
}
如果您想自行设置而不是依靠BuildInfo.VERSION_NAME
,则可以定义静态const变量,该变量在各种样式中都存在。
答案 1 :(得分:1)
@InstallIn(ApplicationComponent::class)
@Module
class AccountModule {
@Provides
@Singleton
fun provideComparableVersion(application: Application): ComparableVersion {
return ComparableVersion((application as MyApplication).versionName)
}
}
如果您不想看到MyApplication
,则可以使用界面。