Dagger 2模块依赖关系图:绑定多次

2024-02-18

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

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dagger 2模块依赖关系图:绑定多次 的相关文章

  • 如何阻止外部资源加载到WKWebView上?

    我有一个加载网页的应用程序 但阻止下载图像 字体 JavaScript 等 为此 我实现了一个NSURLProtocol与 UIWebView 配合得很好的子类 不过我要迁移到WKWebview 并意识到我精心制作的NSURLProtoco

随机推荐