【发布时间】:2019-11-11 23:30:18
【问题描述】:
我有以下问题:我开始研究 Dagger 2 并尝试将注入添加到我的 App 类。这是我的 App 类的代码:
class TraktTvApp : Application(), HasActivityInjector {
@Inject
lateinit var androidInjector: AndroidInjector<Activity>
override fun activityInjector(): AndroidInjector<Activity>? = androidInjector
override fun onCreate() {
super.onCreate()
appContext = applicationContext
instance = this
initStetho()
initFabric()
DaggerAppComponent
.builder()
.application(this)
.build()
.inject(this)
FirebaseInstanceId.getInstance().instanceId
.addOnCompleteListener(OnCompleteListener { task ->
if (!task.isSuccessful) {
return@OnCompleteListener
}
val token = task.result?.token
}
)
}
private fun initFabric() {
Fabric.with(this, Crashlytics(), CrashlyticsNdk())
}
private fun initStetho() {
if (BuildConfig.DEBUG) {
Stetho.initializeWithDefaults(this)
}
}
companion object {
lateinit var instance: TraktTvApp
lateinit var appContext: Context
}
}
在这个类中,我有appContext 作为属性,我试图用注入替换它。为此,我添加了这一行
DaggerApp 组件 .builder() .application(这个) 。建造() .inject(这个)
当我构建我的应用程序时一切正常,但是当我添加时
@Inject
lateinit var androidInjector: AndroidInjector<Activity>
override fun activityInjector(): AndroidInjector<Activity>? = androidInjector
并尝试构建我得到了这个错误:
public abstract interface AppComponent {
^
dagger.android.AndroidInjector<android.app.Activity> is injected at
com.mikhailovskii.trakttv.TraktTvApp.androidInjector
com.mikhailovskii.trakttv.TraktTvApp is injected at
com.mikhailovskii.trakttv.di.AppComponent.inject(com.mikhailovskii.trakttv.TraktTvApp)
我已经看到了可能的解决方案,但没有一个对我有帮助。这是我AppModule的代码:
@Module
class AppModule {
@Singleton
@Provides
fun provideContext(application: TraktTvApp): Context {
return application.applicationContext
}
}
这里是AppComponent:
@Singleton
@Component(
modules = [
AndroidSupportInjectionModule::class,
AppModule::class
]
)
interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: TraktTvApp): Builder
fun build():AppComponent
}
fun inject(application: TraktTvApp)
}
那么,问题出在哪里,我该如何解决?
【问题讨论】:
-
你为什么要在你的应用程序中添加
AndroidInjector?
标签: android kotlin dependency-injection dagger-2