Android:Kotlin与Dagger活动模块问题
我想用匕首2在某个类上注入活动。所以我被添加到ActivityModule类中。在构建项目时,我遇到一个错误:Android:Kotlin与Dagger活动模块问题,android,kotlin,dagger-2,Android,Kotlin,Dagger 2,我想用匕首2在某个类上注入活动。所以我被添加到ActivityModule类中。在构建项目时,我遇到一个错误: .... AppComponent.java:13: error: android.app.Activity cannot be provided without an @Inject constructor or from an @Provides-annotated method. 所有其他模块工作正常。仅当我在项目上添加活动模块时,我才发现上述错误: class App : A
.... 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提供活动,但其非模块@提供活动,并且活动没有具有@Inject的构造函数。在应用程序子类中,您仍然没有任何活动,这意味着您应该创建一个新组件,该组件应该是现有组件的子组件,通过该组件,您可以提供您的活动。