[英]Kotlin Dagger not inject
我最近从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中运行,您知道如何解决吗?
context
属性在MyApplication
类中声明,但是您要在此处注入Application
基类:
fun inject(application: Application)
...没有注射特性。 您必须在组件中为特定类创建一个inject
方法:
fun inject(application: MyApplication)
这是一个答案,解释了如何更详细地将Dagger与层次结构配合使用。
匕首不是问题。 该错误清楚地表明您已使用lateinit
声明了一个属性,但尚未在Kotlin中对其进行初始化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.