Dagger 2:将代码从Java更改为Kotlin时,注入依赖项问题

问题描述 投票:0回答:1

我在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()

android kotlin dagger-2
1个回答
0
投票

您应该让Dagger通过带有[[@Provides批注的Dagger模块创建Foo的实例,或者使用Foo(Bar(Lorm(...)))手动进行。

© www.soinside.com 2019 - 2024. All rights reserved.