我有以下课程:
class ClassWithInjectedConstructor @Inject constructor(private val simpleInjectedObject: SimpleInjectedObject) : ClassWhichThisInheritsFrom() {
override fun check(): int {
val result = simpleInjectedObject.methodToCall() // Returns an int.
return 1;
}
}
请忽略此功能除了返回1上的值外不会执行任何操作。
我正在尝试处理我如何使用这个类,以及它注入了构造函数。
在我的主应用程序类中(这个类是java,而不是kotlin),我需要使用上面的类...这就是我试图这样做的方法:
final ClassWithInjectedConstructor instance = new ClassWithInjectedInstructor();
我知道我需要将一些东西传递给那个构造函数,但是怎么样?如果它被注入,我需要一些花哨的语法吗?
答案 0 :(得分:4)
使用Dagger进行构造函数注入意味着 Dagger将通过调用构造函数来创建对象,并为传递中的所有依赖项。因此,当您致电new Something()
时,您实际上 无法使用构造函数注入。您只是创建一个对象。
您真正需要做的就是在构造函数上添加@Inject
注释。这样Dagger知道你的类,如果可以提供它的所有依赖,Dagger也可以提供那个类。这真的是你需要做的,当你想在别的地方使用这个课时,你只需要它。
如果使用字段注入(例如在您的Activity中),您只需添加一个带注释的字段,Dagger会将其与所有其他依赖项一起注入
@Inject lateinit var something: Something
fun onCreate(..) { activityComponent.inject(this) }
如果在另一个类中使用它,您只需将它添加到构造函数中......再次使用构造函数注入...
class OtherThing @Inject constructor(val something : Something)
或者为您的组件添加一个提供方法,并且"请求"它以后......
@Component interface MyComponent {
fun provideSomething : Something
}
// ...
val something : Something = myComponent.provideSomething()
如果在您的示例中,Dagger无法提供SimpleInjectedObject
,例如它没有使用构造函数注入,并且您没有添加可以将其提供给任何模块的@Provides
带注释的方法,您将收到一条构建错误,指出无法提供 SimpleInjectedObject ... 关于you can find more information here。