我是一个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财产主持人尚未初始化,这意味着“注入”不起作用