【发布时间】:2019-02-27 18:59:43
【问题描述】:
我已按照 Android Architecture Blueprints Dagger2 进行依赖注入:URL
现在我想将 Adapter 注入我的 Fragment 类:
@ActivityScoped
class MainFragment @Inject
constructor(): DaggerFragment(), ArtistClickCallback {
@Inject lateinit var adapter : ArtistAdapter
}
主模块类:
@Module
abstract class MainModule {
@FragmentScoped
@ContributesAndroidInjector(modules = [MainFragmentModule::class])
internal abstract fun mainFragment(): MainFragment
@Binds
internal abstract fun bindArtistClickCallback(mainFragment: MainFragment) : ArtistClickCallback
}
MainFragmentModule:
@Module
class MainFragmentModule {
@Provides
fun provideArtistAdapter() = ArtistAdapter()
}
这是我的适配器类:
class ArtistAdapter @Inject constructor(
private val artistClickCallback : ArtistClickCallback
) : PagedListAdapter<LastFmArtist, RecyclerView.ViewHolder>(POST_COMPARATOR)
当我构建项目时,出现以下 Kotlin 编译器错误:
error: [Dagger/DependencyCycle] Found a dependency cycle:
public abstract interface AppComponent extends dagger.android.AndroidInjector<com.sample.android.lastfm.LastFmApp> {
^
com.sample.android.lastfm.ui.main.MainFragment is injected at
com.sample.android.lastfm.ui.main.MainModule.bindArtistClickCallback$app_debug(mainFragment)
com.sample.android.lastfm.ArtistClickCallback is injected at
com.sample.android.lastfm.ui.main.ArtistAdapter.artistClickCallback
com.sample.android.lastfm.ui.main.ArtistAdapter is injected at
com.sample.android.lastfm.ui.main.MainFragment.adapter
com.sample.android.lastfm.ui.main.MainFragment is injected at
com.sample.android.lastfm.ui.main.MainActivity.mainFragment
com.sample.android.lastfm.ui.main.MainActivity is injected at
dagger.android.AndroidInjector.inject(T) [com.sample.android.lastfm.di.AppComponent → com.sample.android.lastfm.di.ActivityBindingModule_MainActivity$app_debug.MainActivitySubcomponent]
你能建议我如何解决这个问题吗?
代码可以在URL找到
【问题讨论】: