Dagger2 找不到带注释的方法
Dagger2 not finding annotated methods
我正在构建一个 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)
Dagger 依赖项:
dependencies {
annotationProcessor 'com.google.dagger:dagger-compiler:2.17'
compile 'com.google.dagger:dagger:2.17'
...
}
模块 Class:
@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());
}
}
组件class:
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 项目,使用 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)
Dagger 依赖项:
dependencies {
annotationProcessor 'com.google.dagger:dagger-compiler:2.17'
compile 'com.google.dagger:dagger:2.17'
...
}
模块 Class:
@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());
}
}
组件class:
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();
}