我是Dagger 2的新手,試圖將一個(非常)複雜的應用程序移植到它。Dagger 2模塊依賴關係圖:綁定多次
我們對'common'庫有一些依賴關係(與其他項目共享)。那些'普通'圖書館有時候依賴於其他'普通'圖書館。每個庫都暴露一個模塊。
一個例子:
@Module
public class JsonModule {
@Provides
public Mapper provideMapper(ObjectMapper objectMapper) {
return new DefaultMapper(objectMapper);
}
@Provides
public ObjectMapper provideObjectMapper() {
return ObjectMapperFactory.build();
}
}
我們的HTTP模塊依賴於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();
}
不幸的是,當我編譯項目,我得到一個匕首編譯器錯誤:
[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)
我在做什麼錯?在相同的依賴關係圖中兩次依賴模塊是錯誤的嗎?
也許是因爲您在HttpModule中包含了一次,並且在MyAppModule中再次包含它,請嘗試在其中一個位置刪除「包含JsonModule」 –