Kotlin - Dagger 2不是注入物体

时间:2017-11-25 23:48:10

标签: android kotlin dagger-2

我已经创建了简单的应用来测试Dagger 2注入。我想我已经写了一切属性,但在运行时我得到这个错误。

kotlin.UninitializedPropertyAccessException: lateinit property app has not been initialized

事实证明,没有任何依赖注入。

以下是我的例子:

组件:

@Component(modules = arrayOf(AppModule::class))
interface AppComponent {
    fun inject(app : App)
}

IMainomponent:

@Component(modules = arrayOf(MainPresenterModule::class))
interface IMainComponent {
    fun inject(mainView : MainActivity)
}

的AppModule:

@Module
class AppModule(val app: App) {
    @Provides @Singleton fun provideApp() : App = app
}

主要演示者模块:

@Module
class MainPresenterModule(private val view: MainActivity) {
    @Provides
    fun provideView() : MainActivity = view
}

在活动中使用:

class MainActivity : AppCompatActivity(), IMainView {

    @Inject lateinit var presenter : MainPresenter
    @Inject lateinit var app : App

    val component: IMainComponent by lazy {
        DaggerIMainComponent
                .builder()
                .mainPresenterModule(MainPresenterModule(this))
                .build()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        component.inject(this)
    //        presenter.beginMessuring()

        if(app != null) // fails here because all lateinits are null
        {

        }
    }

    override fun toastMessage(message: String) {
        Toast.makeText(this, message, Toast.LENGTH_LONG).show()
    }
}

你能不能告诉我我做错了什么。

Gradle dagger settigns:

kapt 'com.google.dagger:dagger-compiler:2.13'
implementation 'com.google.dagger:dagger:2.13'

编辑:

我已经知道当我使用例如这个配置Dagger图时,

DaggerIMainComponent.builder().mainPresenterModule(MainPresenterModule(this)).build()

我得到的信息是不推荐使用mainPresenterModule方法。我发现android工作室通常会在找不到构建模块提供的任何@Inject组件时显示该信息。

0 个答案:

没有答案