【问题标题】:Dagger 2 module dependency graph: bound multiple timesDagger 2 模块依赖图:绑定多次
【发布时间】:2016-02-05 20:55:44
【问题描述】:

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

我做错了什么?在同一个依赖图中两次依赖一个模块有错吗?

【问题讨论】:

  • 可能是因为您将它包含在 HttpModule 中,然后又包含在 MyAppModule 中,请尝试在其中一个位置删除 includes JsonModule

标签: dagger dagger-2


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这个问题好像和我们项目的情况有关:

    • 常见的项目结合了 Groovy 和 Java
    • 常用项目都是使用 Gradle 构建的
    • 应用项目结合了 Groovy 和 Java
    • 应用程序项目是使用 Maven 和 groovy-eclipse-compiler 构建的

    基本上:我现在责怪 groovy-eclipse-compiler。我将项目转换为 Gradle,现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      相关资源
      最近更新 更多