我有这个课:

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
}

09-28 07:31