Android 匕首绑定多次:试图创建一个伪实现
大家好,我正在尝试为我的活动创建一个假演示者我有我的模块,我们称之为Activity1模块,我在其中设置了所有演示者、用例、所有内容,它工作得非常完美,但当尝试创建一个屏幕,其中使用了一个假演示者的确切活动时,它表示我已绑定该演示者多次 我所做的是:Android 匕首绑定多次:试图创建一个伪实现,android,kotlin,dagger-2,dagger,Android,Kotlin,Dagger 2,Dagger,大家好,我正在尝试为我的活动创建一个假演示者我有我的模块,我们称之为Activity1模块,我在其中设置了所有演示者、用例、所有内容,它工作得非常完美,但当尝试创建一个屏幕,其中使用了一个假演示者的确切活动时,它表示我已绑定该演示者多次 我所做的是: @Module abstract class Activity1Module{ @Binds abstract fun providePresenter(impl: PresenterImpl) : Activity1Contract.Pr
@Module
abstract class Activity1Module{
@Binds
abstract fun providePresenter(impl: PresenterImpl) : Activity1Contract.Presenter
.....
}
然后我创建了一个新模块FakeActivity1模块,如下所示:
@Module(includes = [Activity1Module::class])
abstract class FakeActivity1Module {
@Binds
abstract fun bindsFakePresenter(impl: FakePresenterImpl): Activity1Contract.Presenter
.....
}
但是看起来它不像这样,有没有办法在不创建
@Named
或触摸生产代码的情况下使用假模块而不是生产模块?Dagger没有任何能力让一个模块直接覆盖另一个模块的绑定。FakeActivity1Module和Activity1Module应该包含类似的绑定,但两者都不应该在另一个的包含列表中
但是,您可以将公共绑定提取到Activity1CommonModule(根据需要命名),并使Activity1Module和FakeActivity1Module都包含该模块。这将允许您尽可能避免重复自己的操作,而在概念上是以文件之间的一些间接操作为代价的
您甚至可以将Activity1CommonModule作为嵌套接口(或抽象或静态类)包含在Activity1Module中;您仍然需要Activity1Module的包含
来包含自己的Activity1Module.Activity1Commodule.class
,但这样做的好处是可以将所有Activity1Module的绑定集中在一个文件中,还可以很容易地看穿差异(git diff、p4 diff等)当绑定移入或移出公共集时。同一类不能被注入2次,并且会产生多次绑定的错误。因此,对于FakeActivity1Module
,而不是创建新的注入。尝试覆盖活动1模块
并应用更改
class FakeActivity1Module: Activity1Module {
overrides fun providePresenter(): Activity1Contract.Presenter = FakePresenterImpl()
}
您可以在组件中使用FakeActivity1Module
进行测试,它应该可以按预期工作