簡體   English   中英

Android:帶有Dagger活動模塊問題的Kotlin

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM