Sono nuovo a Dagger 2, cercando di eseguire il porting di un'applicazione (abbastanza) complessa.Grafico di dipendenza del Dagger 2: rilegato più volte
Abbiamo diverse dipendenze da librerie "comuni" (condivise con altri progetti). Queste librerie "comuni" a volte dipendono da altre librerie "comuni". Ogni libreria espone un modulo.
Un esempio:
@Module
public class JsonModule {
@Provides
public Mapper provideMapper(ObjectMapper objectMapper) {
return new DefaultMapper(objectMapper);
}
@Provides
public ObjectMapper provideObjectMapper() {
return ObjectMapperFactory.build();
}
}
nostro modulo Http dipende dalla JsonModule:
@Module(includes = {JsonModule.class})
public class HttpModule {
public HttpHelper provideHttpHelper(ObjectMapper objectMapper) {
return new DefaultHttpHelper(objectMapper);
}
}
Infine nella mia richiesta, ho dipendono entrambi questi moduli:
@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);
}
}
Ho poi avere 1 componente che dipende dal mio MyAppModule:
@Component(modules = MyAppModule.class)
@Singleton
public interface MyAppComponent {
public Service2 service2();
}
Purtroppo, quando compilo il progetto, ottengo un errore di compilazione 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)
Che cosa sto facendo di sbagliato? È sbagliato dipendere da un modulo due volte nello stesso grafico delle dipendenze?
forse perché lo includi una volta in HttpModule e di nuovo in MyAppModule, prova a rimuovere 'include JsonModule' in uno di quei luoghi –