我有这个课:
public class ClassWithoutInject {
}
...以及这个模块...
@Module(
injects={
ClassWithoutInject.class
})
public class SimpleModule {
}
我是否认为这会产生编译时错误,这是错误的吗?在运行时,我得到:
Unable to create binding for com.example.ClassWithoutInject required by class com.example.SimpleModule
(因为该类没有@Inject注释的构造函数)。但是 Dagger 在编译时不应该知道吗?
最佳答案
您实际上在哪里注入(inject)ClassWithoutInjects
?
模块上的injects
引用将请求该模块提供的依赖项的类。
因此,在这种情况下,Dagger期望ClassWithoutInjects
向ObjectGraph请求依赖项,并且此模块提供了依赖项(当前为空)。
如果要提供ClassWithoutInjects
作为依赖关系,而不是作为依赖关系的使用者(这是模块中的设置),请在其构造函数中添加@Inject
或在模块中添加显式提供程序方法。
@Module
public class SimpleModule {
@Provides ClassWithoutInjects provideClassWithoutInjects() {
return new ClassWithoutInjects();
}
}
如果
ClassWithoutInjects
是依赖项的使用者。@Module(injects = ClassWithoutInjects.class)
public class SimpleModule {
// Any dependencies can be provided here
// Not how ClassWithoutInjects is not a dependency, you can inject dependencies from
// this module into it (and get compile time verification for those, but you can't
// provide ClassWithoutInjects in this configuration
}
public class ClassWithoutInject {
// Inject dependencies here
}