我是一個Android的新手,並試圖使用Dagger2。我花了整晚,仍然不知道爲什麼我的匕首不提供主持人。這裏是我的代碼(我用的科特林)Dagger2沒有注入
AppComponent
@Singleton
@Component(modules = arrayOf(PresenterModule::class))
interface AppComponent {
fun inject(target: SplashActivity)
}
PresenterModule
@Module
class PresenterModule {
@Provides
@Singleton
fun provideSplashPresenter(): SplashPresenter {
return SplashPresenter()
}
}
應用
class App: Application() {
companion object {
lateinit var appComponent: AppComponent
}
override fun onCreate() {
super.onCreate()
appComponent = initDagger()
}
private fun initDagger(): AppComponent {
return DaggerAppComponent.create()
}
}
這是主持人
class SplashPresenter: BasePresenterImpl<SplashContract.View>(), SplashContract.Presenter {
override fun performToast(mess: String) {
logi("abc", "performToast")
logi("abc", "mess: " + mess)
mView?.showLoading()
if (mess.isNullOrBlank()) {
mView?.showTosat("this is empty mess") ?: logi("abc", "null")
} else {
mView?.showTosat(mess) ?: logi("abc", "null")
}
mView?.hideLoading()
}
}
最後,這是我SplashActivity
class SplashActivity : BaseActivity(), SplashContract.View {
@Inject
lateinit var presenter: SplashPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)
presenter.attachView(this)
//TODO: check log in
//TODO: If logged in => start main screen
//TODO: If not logged in => load login activity
button.setOnClickListener{
presenter.performToast(editText.text.toString())
logi("abc", "perform clicked")
}
}
}
當我運行這些代碼,我得到這個錯誤 Lateinit財產主持人尚未初始化,這意味着「注入」不起作用