如何将参数传递给Hilt模块?

时间:2020-07-02 08:06:20

标签: android dagger-2 dagger-hilt

我开始将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模块?

2 个答案:

答案 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,则可以使用界面。