![](/img/trans.png)
[英]Android Dagger 2.11 with Kotlin, ContributesAndroidInjector Annotation issue
[英]Android: Kotlin with Dagger activity module issue
我想在Dagger 2
某堂课上注入活动。 因此,我将项目添加到ActivityModule
类中。 在构建项目时,出现错误:
.... AppComponent.java:13: error: android.app.Activity cannot be provided without an @Inject constructor or from an @Provides-annotated method.
所有其他模块均正常工作。 只有当我在项目上添加活动模块时,我才会遇到错误:)
class App : Application(), HasActivityInjector {
@field:Inject lateinit var component: AppComponent
@field:Inject
lateinit var injector: DispatchingAndroidInjector<Activity>
override fun activityInjector() = injector
override fun onCreate() {
super.onCreate(); let { instance = this }
DaggerAppComponent.builder()
.appModule(AppModule(this))
.build()
.apply { inject(this@App); component = this }
.inject(this)
......
}
private fun registerCallBack() = registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
component.inject(activity)
}
...
...
}
}
@AppScope
@Component(modules = arrayOf(
AndroidInjectionModule::class,
AndroidSupportInjectionModule::class,
ActivityBuilderModule::class,
FragmentBuilderModule::class,
AppModule::class,
ActivityModule::class)
)
interface AppComponent {
interface Builder {
@BindsInstance
fun application(app: App): Builder
fun build(): AppComponent
}
@ApplicationContext
fun getContext(): Context
fun getActivity(): Activity
fun inject(application: App)
fun inject(activity: Activity)
}
@Module()
class ActivityModule(private val activity: Activity) {
@Provides
@PerActivity
@ActivityContext
fun provideActivity() = activity
@Provides
@PerActivity
@ActivityContext
fun provideContext() = activity
}
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class AppScope
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class PerActivity
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class PerFragment
@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class ActivityContext
@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class ApplicationContext
class HomeFragment : BaseFragment(){
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
...
val example = (context as App).component.getActivity()
...
}
}
这条线是问题所在。
fun getActivity(): Activity
AppComponent
提供Activity
但不提供其@Provides
模块,而Activity
没有具有@Inject
的构造函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.