Dagger无法注入应用程序上下文

问题描述

我设置了匕首来管理片段和视图模型。我需要将应用程序上下文传递给我的视图模型,以便实例化存储库类并与之通信。当我尝试执行此操作时,我从匕首中收到一条错误消息:

    error: [Dagger/DependencyCycle] Found a dependency cycle:
public abstract interface AppComponent {
                ^
      com.example.framework.BaseApplication is injected at
          com.example.di.AppModule.provideAppContext(application)
      com.example.framework.BaseApplication is injected at
          com.example.di.MainViewModelModule.provideMainViewModelFactory(application,�)
      androidx.lifecycle.ViewModelProvider.Factory is injected at
          com.example.framework.presentation.common.MainFragmentFactory(viewModelFactory)
      com.example.framework.presentation.common.MainFragmentFactory is injected at
          com.example.framework.presentation.main.MainActivity.fragmentFactory
      com.example.framework.presentation.main.MainActivity is injected at

我是匕首的新手,因此我努力确定此问题的根本原因以及如何实施修复程序。对于此问题中的大量代码表示歉意,但匕首具有许多可能出现问题的类。

APP组件

@Component(
    modules = [
        AppModule::class,MainViewModelModule::class,MainFragmentFactoryModule::class
    ]
 )
 interface AppComponent {

 @Component.Builder
  interface Builder {

      @BindsInstance
      fun application(application: Application): Builder
      fun build(): AppComponent
  }

fun inject(mainActivity: MainActivity)

APP模块

@ExperimentalCoroutinesApi
@FlowPreview
@Module
object AppModule {

@JvmStatic
@Provides
@Singleton
fun provideAppContext(application: BaseApplication): BaseApplication{
    return application
}

查看模型模块

@ExperimentalCoroutinesApi
@FlowPreview
@Module
object MainViewModelModule {

@Singleton
@JvmStatic
@Provides
fun provideMainViewModelFactory(
        application: BaseApplication,editor: SharedPreferences.Editor,sharedPreferences: SharedPreferences
): ViewModelProvider.Factory{
    return MainViewModelFactory(
            application = application,editor = editor,sharedPreferences = sharedPreferences
    )
}

查看模型工厂

@FlowPreview
@ExperimentalCoroutinesApi
@Singleton
class MainViewModelFactory
@Inject
constructor(
    private val application: BaseApplication,private val editor: SharedPreferences.Editor,private val sharedPreferences: SharedPreferences
) : ViewModelProvider.Factory {

override fun <T : ViewModel> create(modelClass: Class<T>): T {
    return when(modelClass){

        ViewModelUsers::class.java -> {
            ViewModelUsers(
                    application = application,sharedPreferences = sharedPreferences
            ) as T
        }

查看模型

@ExperimentalCoroutinesApi
@FlowPreview
@Singleton
class ViewModelUsers
@Inject
constructor(
        application: BaseApplication,sharedPreferences: SharedPreferences
): ViewModel() {
    private var repoUsers = RepoUsers(application)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)