Dagger2 не находит аннотированные методы - PullRequest
0 голосов
/ 19 июня 2019

Я строю Java-проект, используя Gradle для сборки проекта и 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 Версия Gradle: 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 Ответ

2 голосов
/ 19 июня 2019

Вы нигде не добавляете ConnectionDTO, поэтому Dagger жалуется, что не может его найти.

Вы добавляете @Named("sourceConnection") ConnectionDTO, а также @Named("destinationConnection") ConnectionDTO, поэтому вам также следует запросить те .

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

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