Dagger2在android中不起作用

时间:2017-04-16 02:18:57

标签: android dependency-injection kotlin dagger

我使用dagger2

时遇到问题

我创建了Component,Module,Provide

class testModule {
    @Provides @Singleton
    fun provideTestServer(): TestService {
    }
}

我在MainActivity中调用onCreate()

DaggerImageComponent.builder().build().inject(this)

这是我的问题 DI在MainActivity中工作正常

class MainActivity: AppCompatActivity {
    @Inject
    lateinit var testService: TestService
}

但其他文件无效。

object TestObject {
    @Inject
    @JvmSynthetic // error: static field cannot inject
    lateinit var testService: TestService
    fun test() = testService.testfun()
}

@Singleton
class TestClass {
    @Inject
    lateinit var testService: TestService
    fun test() = testService.testfun()
}

TestClass和TestObject获取错误   - lateinit属性testInterface尚未初始化

我不明白为什么在TestClass,TestObject中出现错误。

1 个答案:

答案 0 :(得分:1)

你应该在你想要注入变量的类中调用“inject”。 你是为MainActivity做的,但你也应该在其他类中注入你的组件。顺便说一下,你有TestClass,似乎你也在注入的客户端代码中使用它,因为它有“Singleton”注释。如果确实如此 - 您只需在模块中为其添加提供程序并将服务作为构造函数参数传递:

Rows
  3
  4
  6
 11

然后,你的TestClass应该有构造函数:

(defun caesar (s n)
  (with-output-to-string (cipher)
    (labels ((beef (s)
               (when s
                  (princ <whatever> cipher)
                  (beef (rest s)))))
      (beef (coerce s 'list)))))

我建议你再次阅读有关匕首的信息,请查看本教程: http://www.vogella.com/tutorials/Dagger/article.html