android - 匕首绑定多次:试图创建一个假的实现
问题描述
嗨,我正在尝试为我的活动创建一个假演示者我有我的模块让我们称之为 Activity1module 我已经设置了所有演示者、用例、所有内容,并且它运行良好,但是当尝试创建一个使用它的屏幕时与假演示者的确切活动它说我已经绑定了多次该演示者。
我所做的是:
@Module
abstract class Activity1Module{
@Binds
abstract fun providePresenter(impl: PresenterImpl) : Activity1Contract.Presenter
.....
}
然后我创建了一个新模块 FakeActivity1Module ,它是这样的:
@Module(includes = [Activity1Module::class])
abstract class FakeActivity1Module {
@Binds
abstract fun bindsFakePresenter(impl: FakePresenterImpl): Activity1Contract.Presenter
.....
}
但看起来它不喜欢这种方式,有没有办法在不创建@Named
或接触生产代码的情况下使用假的而不是生产的?
解决方案
Dagger 没有任何能力让一个模块直接覆盖另一个模块的绑定。FakeActivity1Module 和 Activity1Module 应该包含类似的绑定,但都不应该在对方的includes
列表中。
但是,您可以提取到 Activity1CommonModule(根据您的喜好命名)的通用绑定,并让 Activity1Module 和 FakeActivity1Module 都包含该模块。这将允许您尽可能避免重复自己,但以文件之间的某些间接概念为代价。
您甚至可以将 Activity1CommonModule 作为嵌套接口(或抽象或静态类)包含在 Activity1Module 中;你仍然需要 Activity1Moduleincludes
来包含它自己的 Activity1Module Activity1Module.Activity1CommonModule.class
,但是你可以将所有 Activity1Module 的绑定集中在一个文件中,并且可以在绑定移动时轻松查看差异(git diff、p4 diff 等)在或不在公共集合中。
推荐阅读
- python-3.x - 为什么我的程序有“IndentationError: unindent does not match any external indentation level”?
- javascript - 在断点期间更改脚本元素的 src 属性
- java - 带有spring boot的Mybatis ResultHandler无法运行
- r - 在 R 中设置活动的 docker 机器
- android - 如何在android的SQLiftDatabase中保存树Uri
- javascript - 如何在node.js中将缓冲区转换为字符串和字符串转换为缓冲区?
- android - 使用 inflate with parent 和 attachToRoot true 或调用 addView() 将 childview 添加到 parent 有什么区别?
- javascript - 在图中找到具有最小值的节点
- python - AttributeError:元组对象没有属性移动(OOP)
- python - Python Pyomo:布尔语句中变量的简单优化问题