Android Dagger2 ComponentProcessor 无法处理

问题描述 投票:0回答:3

我正在尝试使用

Dagger2
制作多模块项目。您可以在链接后面看到我的代码。在 main
 分支中是工作解决方案,其中所有匕首类都位于 
presentation
 模块中。

现在我正在尝试为 DI 根创建单独的

app

 模块。您可以在
develop分支
中看到最新的尝试
。它不起作用。我想在
ApplicationComponent
 模块中创建我的根 
app
 组件,并添加来自其他模块的 
PresentationComponent
 (子)组件。每次我尝试某件事,最终我都会得到以下结果:

dagger.internal.codegen.ComponentProcessor 无法处理“ru.ircover.schultetables.app.ApplicationComponent”,因为并非其所有依赖项都可以解决。检查编译错误或生成代码的循环依赖

这很奇怪,因为与

main

 分支相比,我没有更改任何依赖项。唯一改变的是 - 从根组件 
ApplicationComponent
 到子组件 
PresentationComponent
 的新链接。据我了解,无法将循环依赖显示为 
app
 模块,并且其内容在 
presentation
 模块中不可见。我已经按照我在谷歌上遇到的所有教程进行了操作,但没有一个有帮助。

我已经尝试过:

    添加到子组件的根组件getter。
  1. 添加到子组件的根组件
  2. Builder
    Factory
  3. 使用
  4. subcomponent
     链接添加到根组件特殊模块。
  5. 将子组件的
  6. inject
    方法移动到父组件。
现在我被困住了。问题似乎出在组件或模块连接中的某个地方,但我无法找到它发生的位置和方式。我这里需要帮助。

android kotlin dagger-2
3个回答
11
投票
根据

Google文档你可以这样做:

  1. 向类添加

    @HiltViewModel

    注释

  2. 将构造函数上的

    @ViewModelInject

    注释替换为
    @Inject

  3. @Assisted

     构造函数参数中删除 
    SavedStateHandle
     - 如果存在

  4. 从您的

    androidx.hilt:hilt-lifecycle-viewmodel

     文件中删除旧的 
    build.gradle
     依赖项


1
投票
我已经成功地通过这些更改构建了您的项目:

    左边是一个演示文稿,右边是一个应用程序,如你所见,我已经删除了 dagger-android,并将 moxy deps 作为 API(因为你的应用程序是一个主模块,它必须看到所有 deps构建一个图表),或者您可以将 moxy deps 添加到应用程序
  1. 之后,不会有任何匕首警告,但您需要修复一些文件才能完成构建。顺便说一句,将某些内容传递给模块的构造函数是一种不好的且不推荐的做法。正如您在PresentationModule中看到的,我删除了构造函数并删除了provideContext。我将 Context 绑定移至 ApplicationComponent - 这是执行此操作的好且正确的位置。
  2. 我还从PresentationComponent.Factory.create中删除了构造函数参数

0
投票
您需要添加 dagger.android 支持库,因为您的 moxy.MvpAppCompatFragment 是

基于 Android 支持片段构建的。将其添加到您的演示文稿 gradle 文件中:

implementation "com.google.dagger:dagger-android:$dagger_version" implementation "com.google.dagger:dagger-android-support:$dagger_version"


来自您的开发分支的

presentation/build.gradle:

implementation "com.google.dagger:dagger:$dagger_version" kapt "com.google.dagger:dagger-compiler:$dagger_version" kapt "com.google.dagger:dagger-android-processor:$dagger_version"
来自 

Gradle 设置

如果您在 dagger.android 中使用类,您还需要包括:

implementation 'com.google.dagger:dagger-android:2.x' implementation 'com.google.dagger:dagger-android-support:2.x' // if you use the support libraries annotationProcessor 'com.google.dagger:dagger-android-processor:2.x'

    
© www.soinside.com 2019 - 2024. All rights reserved.