Dagger中是否存在与Guice的install(new ModuleA)功能等价的用法?
Dagger 等价实现方案
Guice 中通过install()方法引入子模块的逻辑,在Dagger中是通过@Module注解的includes属性实现的,你的示例对应代码如下:
1. 改造ModuleB
首先给原有ModuleB添加Dagger的@Module注解,内部的依赖配置(比如@Provides方法、绑定逻辑)可以基本保留:
import dagger.Module; @Module public class ModuleB { // 原有ModuleB的依赖提供逻辑保持不变 // 比如 @Provides 方法、configure 方法都可复用 }
2. 改造ModuleA
不需要再继承AbstractModule,也不需要重写configure()方法调用install,直接在@Module注解的includes参数中声明引入ModuleB即可:
import dagger.Module; @Module(includes = ModuleB.class) public class ModuleA { public ModuleA() { // 原有构造逻辑完全保留 } // 原有ModuleA的依赖提供逻辑保持不变 }
补充说明
includes支持同时引入多个模块,写法为includes = {ModuleB.class, ModuleC.class},对应Guice中多次调用install()的效果。- 如果ModuleB需要传入自定义参数构造实例,不需要在ModuleA中处理,只需要在初始化Dagger Component时,手动传入实例化好的ModuleB即可,Dagger会自动匹配关联:
DaggerYourComponent.builder() .moduleA(new ModuleA()) .moduleB(new ModuleB(自定义参数)) .build(); - 如果你原有Guice的
configure()方法中有大量绑定逻辑不想改造,Dagger也支持在@Module注解的类中定义void configure(Binder binder)方法,用法和Guice基本一致。
内容的提问来源于stack exchange,提问作者babajaj
相关产品推荐
相关产品推荐

