Tôi mới dùng Dagger 2, cố gắng chuyển một ứng dụng phức tạp (khá) sang nó.Đồ thị phụ thuộc Dagger 2 mô-đun: bị ràng buộc nhiều lần
Chúng tôi có một số phụ thuộc vào thư viện 'phổ biến' (được chia sẻ với các dự án khác). Những thư viện 'phổ biến' đôi khi phụ thuộc vào các thư viện 'phổ biến' khác. Mỗi thư viện hiển thị một mô-đun.
Một ví dụ:
@Module
public class JsonModule {
@Provides
public Mapper provideMapper(ObjectMapper objectMapper) {
return new DefaultMapper(objectMapper);
}
@Provides
public ObjectMapper provideObjectMapper() {
return ObjectMapperFactory.build();
}
}
chúng tôi HttpModule phụ thuộc vào JsonModule:
@Module(includes = {JsonModule.class})
public class HttpModule {
public HttpHelper provideHttpHelper(ObjectMapper objectMapper) {
return new DefaultHttpHelper(objectMapper);
}
}
Cuối cùng trong ứng dụng của tôi, tôi phụ thuộc vào cả hai module:
@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);
}
}
tôi sau đó có 1 thành phần phụ thuộc vào MyAppModule của tôi:
@Component(modules = MyAppModule.class)
@Singleton
public interface MyAppComponent {
public Service2 service2();
}
Thật không may, khi tôi lập dự án, tôi nhận được một Dagger trình biên dịch báo lỗi:
[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)
Tôi đang làm gì sai? Có sai khi phụ thuộc vào một mô-đun hai lần trong cùng một biểu đồ phụ thuộc không?
có thể vì bạn đưa nó vào HttpModule và một lần nữa trong MyAppModule, hãy thử xóa 'include JsonModule' ở một trong những địa điểm đó –