Dagger 2 模块依赖图 : bound multiple times

标签 dagger dagger-2

我是 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)

我究竟做错了什么?在同一个依赖图中两次依赖一个模块是错误的吗?

最佳答案

在您的 MyAppModule你不应该包括 JsonModule ,它被 dagger 隐式包含。当包括 HttpModule dagger 将自动包含HttpModule 的所有模块包括(在您的情况下是 JsonModule )。

关于Dagger 2 模块依赖图 : bound multiple times,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34721081/

相关文章:

android - 每个 fragment (或 Activity 等)的 Dagger 2 自定义范围

java - Dagger 2 组件依赖

android - 如何使用 Dagger 2 将上下文注入(inject) Presenter

java - Dagger 2 问题 :@Subcomponent. 没有参数的生成器方法必须返回 @Subcomponent 类型

android - 当项目包含多个 android 模块时,不会生成 Dagger 测试组件

android - 子组件(无作用域)可能不引用作用域绑定(bind) : @Singleton @Provides @org. jetbrains.annotations.NotNull

android - 如何抑制由未能生成的类引起的代码生成错误?

将 dagger 2.18 与 kotlin kapt 结合使用时,Android 构建失败

android - 覆盖 Dagger 模块中的依赖项

android - 如何为父 fragment 和子 fragment 提供相同的 ViewModel 实例