gpt4 book ai didi

android - 覆盖 Dagger 模块中的依赖项

转载 作者:行者123 更新时间:2023-11-29 01:01:59 25 4
gpt4 key购买 nike

有一个具有共同依赖关系的基础模块:

@Module
object CommonActivityModule {

@JvmStatic
@Provides
fun baseNavigator(activity: AppCompatActivity): Navigator = BaseNavigator(activity, SOME_STUFF)

// other common deps
}

我将它包含在每个 Activity 模块中以获取那些常见的 deps。但在某些模块中,我想用另一个来隐藏一些基本接口(interface)实现:

@Module(includes = [CommonActivityModule::class])
interface SomeActivityModule {

@Binds
fun anotherNavigator(anotherNavigator: AnotherNavigator): Navigator

// other module's binds
}

它抛出 ..Navigator is bound multiple times 异常。有没有一种方法可以在不删除整个 CommonActivityModule 的情况下替换这些接口(interface)实现?

最佳答案

您将每个绑定(bind)为导航器。我相信您需要在阴影绑定(bind)上使用不同的返回类型。

或者,您可以尝试使用限定符。定义自定义限定符很容易;您应该能够在线找到示例。我会分享一个,但我现在正在打电话。

这个答案已经被接受了,所以我想添加一些代码让它更“完整”。这是自定义“限定符”(Kotlin) 的示例

import javax.inject.Qualifier

@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class DelayQualifier

用法:

@Module object {
@Provides @DelayQualifier @JvmStatic
fun provideDelay(): Long = if (BuildConfig.DEBUG) 1L else 3L
}

@ActivityScoped
class SignupViewModelFactory @Inject constructor(
@param:DelayQualifier private val delay: Long
) : ViewModelProvider.Factory { ... }

这是我目前在我的项目中注入(inject)的唯一Long,所以我不需要限定符。但是如果我决定我想要更多的 Long,我会后悔没有让这个合格。

关于android - 覆盖 Dagger 模块中的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50423829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com