我是 Dagger 2 的新手,试图将一个(相当)复杂的应用程序移植到它。
我们对“通用”库有几个依赖项(与其他项目共享)。这些“通用”库有时依赖于其他“通用”库。每个库公开一个模块。
一个例子:
@Module
public class JsonModule {
@Provides
public Mapper provideMapper(ObjectMapper objectMapper) {
return new DefaultMapper(objectMapper);
}
@Provides
public ObjectMapper provideObjectMapper() {
return ObjectMapperFactory.build();
}
}
我们的 HttpModule 依赖于 JsonModule:
@Module(includes = {JsonModule.class})
public class HttpModule {
public HttpHelper provideHttpHelper(ObjectMapper objectMapper) {
return new DefaultHttpHelper(objectMapper);
}
}
最后,在我的应用程序中,我依赖于这两个模块:
@Module(includes = {JsonModule.class, HttpModule.class})
public class MyAppModule {
public Service1 provideService1(ObjectMapper objectMapper) {
return new DefaultService1(objectMapper);
}
public Service2 provideService2(Mapper mappper) {
return new DefaultService2(mappper);
}
}
然后我有 1 个依赖于我的 MyAppModule 的组件:
@Component(modules = MyAppModule.class)
@Singleton
public interface MyAppComponent {
public Service2 service2();
}
不幸的是,当我编译该项目时,出现 Dagger 编译器错误:
[ERROR] com.company.json.Mapper is bound multiple times:
[ERROR] @Provides com.company.json.Mapper com.company.json.JsonModule.provideMapper(com.company.json.ObjectMapper)
[ERROR] @Provides com.company.json.Mapper com.company.json.JsonModule.provideMapper(com.company.json.ObjectMapper)
我究竟做错了什么?在同一个依赖图中两次依赖一个模块是错误的吗?