【问题标题】:Kotlin Dagger not injectKotlin Dagger 不注入
【发布时间】:2018-01-22 04:24:00
【问题描述】:

我最近从 java 迁移到 kotlin,并尝试实现 dagger 2 进行依赖注入。

我已将此添加到我的 gradle 中

apply plugin: 'kotlin-kapt'

implementation "com.google.dagger:dagger:2.11"
kapt "com.google.dagger:dagger-compiler:2.11"
compileOnly 'javax.annotation:jsr250-api:1.0'

这是我的模块

@Module
class AppModule(val context : Context) {
    @Provides
    @Singleton
    fun provideContext() = context
}

这是我的组件

@Singleton
@Component(modules = arrayOf(AppModule::class))
interface AppComponent {
    fun inject(application: Application)
}

这是我的应用程序

class MyApplication : Application() {
    @Inject
    lateinit var context : Context

    lateinit var appComponent : AppComponent

    override fun onCreate() {
        super.onCreate()

        appComponent = DaggerAppComponent.builder()
                .appModule(AppModule(this.applicationContext))
                .build()
        appComponent.inject(this)
    }
}

这是我的活动

class SplashActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)

        val context = (applicationContext as MyApplication).context
    }
}

我得到这个错误

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property context has not been initialized

这段代码在 Java 中运行,知道如何解决这个问题吗?

【问题讨论】:

    标签: android kotlin dagger


    【解决方案1】:

    context 属性在 MyApplication 类中声明,但您在此处注入 Application 基类:

    fun inject(application: Application)
    

    ...没有可注射的属性。您必须在组件中为特定类创建一个 inject 方法:

    fun inject(application: MyApplication)
    

    Here's 一个答案,解释了如何更详细地使用带有层次结构的 Dagger。

    【讨论】:

    • 非常感谢,我花了好几个小时才找到这个
    【解决方案2】:

    这不是 Dagger 的问题。该错误清楚地表明您已使用 lateinit 声明了一个属性,但尚未在 Kotlin 中对其进行初始化。

    【讨论】:

    • 对不起,我错过了,我在发布时不小心删除了@Inject。假设在那里,问题仍然是一样的
    • 现在我很困惑。您用applicationContext 构建了AppModule ,然后在App 中再次注入?为什么不简单地跨活动使用 applicationContext ?
    • 我打算以后不只注入上下文,比如改造和其他依赖项
    猜你喜欢
    • 2019-10-27
    • 2018-02-13
    • 2018-03-08
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多