android - 提供带有 Hilt 的 Activity 实例

标签 android dagger-2 dagger-hilt

我怎样才能翻译这样的东西:

@Module
abstract class BaseActivityModule<A : AppCompatActivity> {
    @Binds
    abstract fun provideActivity(activity: A): AppCompatActivity

    companion object {
        @Provides
        @ActivityContext
        fun provideContext(activity: AppCompatActivity): Context = activity
    }
}

@Module
abstract class SomeActivityModule : BaseActivityModule<SomeActivity>()

所以它可以在后面使用,如:
@ActivityScope
class UtilsClass @Inject constructor(
    private val activity: AppCompatActivity,
    ...
){...}

我已经从 dagger 迁移了一个游乐场项目至hilt它非常顺利,但我偶然发现了这个用例。我已经更改了代码,因此我不再需要该实例,但好奇心仍然存在。

现在我们是否可能不需要这种设置:
@ActivityScope
@ContributesAndroidInjector(modules = [SomeActivityModule::class])
abstract fun someActivity(): SomeActivity

最佳答案

我还没有尝试这个代码,如果它不工作请CMiMW,
根据文档 here ,您可以为应用程序上下文和 Activity 上下文使用预定义的限定符。
您的代码可能如下所示

@ActivityScoped
class UtilsClass @Inject constructor(
@ActivityContext private val activity: Context,
... 
){
 ...
 val myActivity = if(context is MyActivity) context as MyActivity else throw ......  // check if its provided context was desired activity
 ...

}

关于android - 提供带有 Hilt 的 Activity 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62373838/

相关文章:

java - 从 VS2010 过渡到 Eclipse IDE for Android/Java dev

android - 错误 : com. app.android.dagger.component.AppComponent (unscoped) may not reference scoped bindings:

android - 使用 Hilt 预填充 Room 数据库,而无需创建额外的数据库实例

java - Dagger2组件初始化

android - 如何使用 Hilt 模拟 View 模型以进行单元测试 fragment ?

android - Jetpack 撰写和导航 : Problems share ViewModel in nested graph

android - 使用startActivityForResult()在 Activity 开始之前显示MainActivity的Android应用

android - 我的 ListView 不显示

android - 我们可以检查 App 是在 phonegap 中制作的还是完全原生的

java - 如何正确使用 Dagger2 和新的 Android 架构组件