Android:Kotlin与Dagger活动模块问题

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

我想用匕首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提供活动,但其非模块@提供活动,并且活动没有具有@Inject的构造函数。

在应用程序子类中,您仍然没有任何活动,这意味着您应该创建一个新组件,该组件应该是现有组件的子组件,通过该组件,您可以提供您的活动。