当前位置: 首页 > 知识库问答 >
问题:

Dagger2在多个分级模块中拆分应用程序

堵彬彬
2023-03-14

我有以下匕首组件结构:

@Singleton @Component(modules = CoreModule.class)
public interface CoreComponent{
    ComponentA plus(ModuleA module);

    ComponentB plus(ModuleB module);
}

@ActivityScope @Subcomponent(modules = ModuleA.class)
public interface ComponentA {
    ComponentA inject(FragmentA fragment);
}

@ActivityScope @Subcomponent(modules = ModuleB.class)
public interface ComponentA {
    ComponentB inject(FragmentB fragment);
}

客户端代码如下所示:

class FragmentA extends Fragment{
    public FragmentA(){
        App.getCoreComponent().plus(new ModuleA()).inject(this);
    }
}

我决定将应用程序分成几个分级模块。我希望有分级core模块和2个模块AB,它们依赖于核心但彼此不了解。

我的问题是,CoreComponent使用从AB导入来创建子组件。因此core依赖于AB

我试图使用@components.builder来解决这个问题,但这也需要在根组件中拥有一组所有子组件的dagger模块。

有没有什么方法可以去除根组件对子组件的依赖关系。

通过根组件的依赖关系,我的意思是它应该了解使用它的所有子组件。

根据dagger文档:

子组件是继承和扩展父组件的对象图的组件。您可以使用它们将应用程序的对象图划分为子图,以便将应用程序的不同部分相互封装,或者在组件中使用多个作用域。

共有1个答案

司徒兴德
2023-03-14

您将无法使用子组件删除依赖项coreComponent->ComponentA,componentB。这不是子组件的工作方式。

您可以尝试通过使componentAComponentB依赖于CoreComponent(componentA,ComponentB->CoreComponent)来逆转这种依赖关系。这将要求您显式导出coreComponent中的对象。

作为附带说明,我必须警告您,您正在尝试做的事情可能会在将来引起一个很大的头痛:通过第三方框架耦合模块的内部实现很少是一个好主意。

 类似资料:
  • 在一个Gradle多模块项目中,在它自己的模块中有bootstrapping,我无法使用MockMvc,因为它需要引用bootstrapping-module。我不确定我是否配置错误了什么。基本结构为: 模块:包含一些REST服务的模块,需要依赖于starter的testImplementation-Dependency starter:bootstrapping-module,用于应用sprin

  • 问:IntelliJ SonarQube插件何时支持多模块Gradle项目? 我在SonarQube用户邮件组(2015-04-07)中问了这个问题,得到的答复是,对多模块Gradle项目的支持将在“下一个冲刺阶段”实现。由于stackoverflow已被指定为解决此类问题的首选新方法,我认为在这里收集有关此特性请求的信息是合适的。 繁殖的步骤 在IntelliJ理念中: 设置/插件:安装Sona

  • 我继承了一个具有以下设置的项目。Gradle中大约有5个单独的模块,分别位于5个不同的git存储库中。这些模块的版本控制是由ScmVersion插件驱动的。其中一个模块是一个将这些模块集成在一起的应用程序。 模块之间的依赖关系在build.gradle dependency部分中由groupId、artificatId和version指定。 我对Gradle很陌生。到目前为止,我已经创建了一个简单

  • 问题内容: 我有以下xml文件作为输入.... 我想将这个xml文件并通过像这样的java代码将其拆分为多个文件… File1.xml File2.xml File3.xml 以及更多的xml文件。每个xml文件最多包含10个或15个IRP_ACCOUNT。 有人能帮帮我吗 ? 问题答案: 快速而肮脏:

  • 如何使用多个使用相同库的应用程序创建gradle根项目。我希望以包含以下内容的tar和zip文件结束: 导致错误

  • MyApp和MyAppCore有自己的AppComponent,MyApp提供ViewModel工厂,MyAppCore提供数据库和网络访问工厂(下面的示例)。 我不确定如何链接AppComponent(或应用程序),以便在MyApp中提供数据库和网络访问。以下是我目前掌握的信息: MyAppCore模块 MyAppCore还具有名为的Room数据库实现和接口(我认为我不需要在这个问题中添加此代码