匕首没有初始化变量

Dagger not initizalize var

我在使用 Kotlin 的 Android 项目中启动 Dagger 时遇到问题。

这个结构是下一个

Dagger 包含在客户端应用程序调用的 Android 模块中

MagicBox.kt

interface MagicBox {
   fun getDate(): Long?
}

MagicBoxImpl.kt

class MagicBoxImpl (): MagicBox{

    var date: Long = Date().time

    override fun getDate(): Long {
        return date
    }
}

MainModule.kt

@Module
class MainModule (private val app: Application) {

    @Provides
    @Singleton
    fun provideMagicBox(): MagicBox {
       return MagicBoxImpl()
    }
}

MainComponent.kt

@Singleton
@Component(modules = [MainModule::class, PresenterModule::class])
interface MainComponent{
    fun inject(target: Activity)
}

Application.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()

}

MainActivity.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()
}

得到如下错误

原因:kotlin.UninitializedPropertyAccessException: lateinit 属性 magicBox 尚未初始化

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 {