动态绑定匕首2

dynamic binding with dagger 2

我在将 Android 应用程序从 Dagger 迁移到 Dagger2 时遇到问题。

我在测试期间使用 Dagger 在不同层注入模拟(单元、功能设备以及介于两者之间的所有内容)。

例如我有一个 NetworkingModule,它提供了一个 HttpTransport 和一个 ServerConnector。对于某些测试,我只是模拟 http 层,对于其他人,我模拟 ServerConnector,而其他测试使用版本 类 来测试与真实测试服务器的集成。

这些测试可以 运行 所有构建风格(调试、发布等)。

我只找到了 Dagger2 的描述,它为每个构建类型设置了一个静态注入配置——即一个发布组件绑定真实 类 和一个调试组件绑定一组模拟。

我需要找到一种方法让测试用例在应用程序启动阶段替换模块。

我怎样才能做到这一点?在我的想法中,当应用程序触发图形的构建时,我总是被卡住,它必须使用一个组件,该组件是某个接口的实现,该接口具有其模块的静态注释???

换个方式问:是否可以在同一版本中编译提供相同注入的多个模块?我将如何在 运行 时间注入正确的模块?

有人可以为我的 NetworkingModule.

示例起草一个解决方案吗

顺便说一句:我大量使用 EspressoRobolectricMockito

谢谢。

找到解决方案:

我不需要构建特定的组件或模块。

我的模块只处理我为在测试时注入模拟而实现和设置的委托。这对于发布版本来说非常便宜。为了测试,我什至可以努力思考一些方便的功能。