2017-04-16 53 views
1

工作,我用dagger2Dagger2不是在Android的

我創建組件,模塊有問題,提供

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

你應該在你想要注入變量的類內部調用「inject」。 你爲MainActivity做過,但你也應該在其他類中注入你的組件。順便說一句,你有TestClass,看起來你也使用它在客戶端代碼也來自注入,因爲它有「Singleton」註釋。如果這是真的 - 你可以簡單的模塊中添加提供程序,並通過服務作爲一個構造器參數:

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

@Provides @Singleton 
    fun provideTestServer(testService: TestService): TestClass { 
    } 
} 

那麼,你的TestClass應該有構造函數:

class TestClass(var testService: TestService) { 
    fun test() = testService.testfun() 
} 

我建議你讀一次再次關於匕首,請查看本教程: http://www.vogella.com/tutorials/Dagger/article.html