有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Dagger2找不到带注释的方法

我正在使用Gradle构建一个Java项目,使用Dagger2作为依赖注入程序。我得到一个错误:

<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 渐变版本:5.4.1(也尝试了4.5.1)

匕首相关性:

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();
}

不确定为什么如果对方法进行了注释,则生成无法识别它们


共 (1) 个答案

  1. # 1 楼答案

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

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

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