我在使用 Kotlin 的 Android 项目中启动 Dagger 时遇到问题。
这个结构是下一个
Dagger 包含在客户端应用程序调用的 Android 模块中
魔术盒.kt
interface MagicBox {
fun getDate(): Long?
}
MagicBoxImpl.kt
class MagicBoxImpl (): MagicBox{
var date: Long = Date().time
override fun getDate(): Long {
return date
}
}
主模块.kt
@Module
class MainModule (private val app: Application) {
@Provides
@Singleton
fun provideMagicBox(): MagicBox {
return MagicBoxImpl()
}
}
主要组件.kt
@Singleton
@Component(modules = [MainModule::class, PresenterModule::class])
interface MainComponent{
fun inject(target: Activity)
}
应用程序.kt
class Application: Application() {
lateinit var mainComponent: MainComponent
override fun onCreate() {
super.onCreate()
mainComponent = initDagger(this)
}
private fun initDagger(app: Application): MainComponent =
DaggerMainComponent.builder()
.mainModule(MainModule(app))
.build()
}
主要 Activity .kt
@Inject
lateinit var magicBox: MagicBox
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_layout)
(application as ClientSdk).mainComponent.inject(this)
tvDaggerTest = findViewById(R.id.tvDaggerTest)
tvDaggerTest!!.text = magicBox.getDate().toString()
}
得到如下错误
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property magicBox has not been initialized
最佳答案
fun inject(target: Activity)
应该是 fun inject(target: MainActivity)
同样为了更好地使用 Dagger,以下内容应该是:
@Module
abstract class MainModule {
@Binds
abstract fun magicBox(impl: MagicBoxImpl): MagicBox
}
和
@Singleton class MagicBoxImpl @Inject constructor(): MagicBox {
关于android - Dagger 未初始化 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57040168/