java - Dagger2 找不到带注释的方法

标签 java gradle dagger-2

我正在使用 Gradle 构建一个 Java 项目,并使用 Dagger2 作为依赖注入(inject)器。我收到此错误:

<path to the class>/MyComponent.java:13: error: [Dagger/MissingBinding] <package>.ConnectionDTO cannot be provided without an @Inject constructor or an @Provides-annotated method.
    ConnectionDTO sourceConnectionDTO();
                  ^
      <package>.ConnectionDTO is provided at
          <package>.MyComponent.sourceConnectionDTO()
<path to the class>/MyComponent.java:14: error: [Dagger/MissingBinding] <package>.ConnectionDTO cannot be provided without an @Inject constructor or an @Provides-annotated method.
    ConnectionDTO destinationConnectionDTO();
                  ^
      <package>.ConnectionDTO is provided at
          <package>.MyComponent.destinationConnectionDTO()

Java 版本 1.8 Gradle 版本:5.4.1(也尝试过 4.5.1)

Dagger 依赖项:

dependencies {
    annotationProcessor 'com.google.dagger:dagger-compiler:2.17'

    compile 'com.google.dagger:dagger:2.17'
    ...
}

模块类:

@Module
public class MyModule {
    private final MyConfiguration config;

    @Inject
    public MetaStoreModule(MyConfiguration config){
        this.config = config;
    }

    @Provides
    @Singleton
    @Named("sourceConnection")
    public ConnectionDTO sourceConnectionDTO() {
        return new ConnectionDTO(config.sourceHost(), config.sourceUser(),
                config.sourcePassword(), config.sourceDataBaseName());
    }

    @Provides
    @Singleton
    @Named("destinationConnection")
    public ConnectionDTO destinationConnectionDTO() {
        return new ConnectionDTO(config.destinationHost(), config.destinationUser(),
                config.destinationPassword(), config.destinationDataBaseName());
    }
}

组件类:

import dagger.Component;

import javax.inject.Singleton;

@Singleton
@Component(modules = MyModule.class)
public interface MyComponent{
    ConnectionDTO sourceConnectionDTO();
    ConnectionDTO destinationConnectionDTO();
}

不知道为什么如果方法被注释,它们不会被构建识别

最佳答案

您没有添加 ConnectionDTO在任何地方,这就是 Dagger 提示找不到它的原因。

您添加@Named("sourceConnection") ConnectionDTO以及 @Named("destinationConnection") ConnectionDTO ,所以您还应该请求那些

@Singleton
@Component(modules = MyModule.class)
public interface MyComponent{
    @Named("sourceConnection")
    ConnectionDTO sourceConnectionDTO();

    @Named("destinationConnection")
    ConnectionDTO destinationConnectionDTO();
}

关于java - Dagger2 找不到带注释的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56670720/

相关文章:

bash - 指定任务的绝对路径的运行gradle会将名称解释为命令

android - 通过 Dagger 2 提供 RoomDatabase 时实现 .addCallback() 的正确方法是什么?

robolectric - Dagger2在Test中不生成组件

java - 如何更改 GWT 的小部件 CSS 值?

java - 使用延迟加载面板时,Wicket 无限重新加载页面

java - 无法在 GWT (2.7) GWTP (1.5) 项目中添加 GwtQuery (1.0.6) DragAndDropCellTree

java - Gradle 下的 JUnit 5 具有多个源集

android - 从 aar 中排除 jar-library

android - Dagger 2 : How to use @Provides and @Binds in same module

java - springframework 获取所有请求头