我在Android(Java)项目中安装了Dagger 2。
我有MyModule
:
@Module
class MyModule {
@Provides
static Lorm provideLorm() {
...
}
}
我有另一个已注入Bar
的类Lorm
:
public class Bar {
@Inject
private Lorm lorm;
@Inject
public Bar() {
}
public void doTask() {
lorm.makeIt();
}
}
然后,我有一个名为Foo
的第三类,它具有Bar
作为依赖项:
class Foo {
// I inject Bar
@Inject
private Bar bar;
// I also make Foo to be injectable to other class
@Inject
public Foo()
public void doIt() {
bar.doTask();
}
}
有效。通过上述设置,我可以通过Foo foo = new Foo(); foo.doIt();
实例化Foo,而匕首可以为我注入依赖项。
现在我想将它们切换为Kotlin。
我尝试过:
class Bar @Inject constructor(private val lorm: Lorm) {
...
}
class Foo @Inject constructor(private val bar: Bar) {
fun doIt()=bar.doTask()
}
但是现在如果我想创建Foo的实例,我就不能做:
val foo = Foo() // compiler complains that I need to pass a instance of bar.
所以,让匕首为我注入依赖项bar
的正确方法是什么,就像它在Java版本中的行为一样,以便我仍然可以执行val foo = Foo()
和调用函数foo.doIt()
?
您应该让Dagger通过带有[[@Provides批注的Dagger模块创建Foo
的实例,或者使用Foo(Bar(Lorm(...)))
手动进行。