Hilt - 所有模块必须是静态的并使用静态提供方法或具有可见的无参数构造函数

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

我正在使用 Hilt 依赖注入。我创建了一个 PermissionModule,一个单例组件,并添加了一个 PermisisonManager 作为 @Provides,而 PermissionManager 将上下文作为参数。 在 PermissionManager 中,我注入了一个构造函数以及一个上下文作为构造函数参数。

下面是我的代码片段: 权限模块:

@Module
@InstallIn(SingletonComponent::class)
interface PermissionsModule {
    @Provides
    @Singleton
    @ApplicationScope
    fun providesPermissionManager(
        @ApplicationContext context: Context
    ): PermissionManager = PermissionManager(context)
}

权限管理器:

class PermissionManager @Inject constructor(
    @ApplicationContext private val context: Context
) {
}

我是 Hilt 又名 DI 的新手,仍在学习并尝试在我最新的应用程序中使用它。

在查阅文档和Stackoverflow时,我发现参数不能通过。

我想知道如何将上下文传递给 PermissionManager 类?

非常感谢任何帮助。

谢谢你。

android kotlin dagger-hilt
1个回答
0
投票

您需要从 DI 模块提供上下文。参考下面的代码。
注意:这里的 MainApplication 是您的应用程序类。

 @Provides
 @Singleton
 fun providesMainApplication(@ApplicationContext context: Context): MainApplication {
    return context as MainApplication
 }

还将权限模块从接口更改为对象。

@Module
@InstallIn(SingletonComponent::class)
object PermissionsModule {
 
   @Provides
   @Singleton
   @ApplicationScope
   fun providesPermissionManager(
     @ApplicationContext context: Context
   ): PermissionManager = PermissionManager(context)
}
© www.soinside.com 2019 - 2024. All rights reserved.