我试图使多模块项目与Dagger2
。你可以看到我的代码following the link。在main
分支是工作解决方案,其中所有的匕首类都在presentation
模块。
现在我尝试为DI根创建单独的app
模块。你可以看到最新的尝试in the develop
branch。它不工作。我想在app
模块中创建我的根ApplicationComponent
组件,并从其他模块添加PresentationComponent
(sub)组件。每次我尝试一些东西,最终我得到以下结果:
dagger.internal.codegen. configentProcessor无法处理“ru. iscover.schultetables.app.ApplicationComponent”,因为无法解析其所有依赖项。请使用生成的代码检查编译错误或循环依赖项
这很奇怪,因为与main
分支相比,我没有改变任何依赖关系。唯一改变的是-从根组件ApplicationComponent
到子组件PresentationComponent
的新链接。据我所知,没有办法将循环依赖显示为app
模块,并且其内容在presentation
模块中不可见。我已经遵循了我在Google,但都没有帮助。
我已经试过了:
1.添加到子组件的根组件getter。
1.添加到子组件的根组件Builder
或Factory
。
1.使用subcomponent
链接添加到根组件特殊模块。
1.将子组件的inject
方法移动到父组件。
现在我被卡住了。似乎问题是在组件或模块连接的某个地方,但我无法找到它发生在哪里以及如何发生的。我需要帮助。
3条答案
按热度按时间z8dt9xmd1#
基于Google documentation,你可以这样做:
1.将
@HiltViewModel
注解添加到类中1.将构造函数上的
@ViewModelInject
注解替换为@Inject
。1.从
SavedStateHandle
构造函数参数中删除@Assisted
(如果存在)1.从
build.gradle
文件中删除旧的androidx.hilt:hilt-lifecycle-viewmodel
依赖项jum4pzuy2#
我已经成功地用这些更改构建了您的项目:

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

中删除了构造函数参数
lc8prwob3#
您需要添加dagger.android支持库,因为您的moxy.MvpAppCompatFragment是built on Android Support Fragments。将此添加到演示文稿gradle文件中:
字符串
从你的开发分支的presentation/build.gradle:
型
在Gradle设置中:
如果你在dagger.android中使用类,你还需要包括:
型