gpt4 book ai didi

java - Dagger2 在几个 gradle 模块中拆分应用程序

转载 作者:搜寻专家 更新时间:2023-11-01 09:35:53 24 4
gpt4 key购买 nike

我有以下 Dagger 组件结构:

@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);
}
}

我决定将应用程序拆分为几个 gradle 模块。我想要 gradle Core 模块和 2 个模块 AB 依赖于核心但彼此不了解。

我的问题是 CoreComponent 使用来自 AB 的导入来创建子组件。所以 Core 依赖于 AB

我试图使用 @Components.Builder 来解决它,但这也需要在根组件中包含 dagger 模块和一组所有子组件。

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

根组件的依赖性是指它应该知道所有使用它的子组件。

根据 dagger 文档:

Subcomponents are components that inherit and extend the object graph of a parent component. You can use them to partition your application’s object graph into subgraphs either to encapsulate different parts of your application from each other or to use more than one scope within a component.

An object bound in a subcomponent can depend on any object that is bound in its parent component or any ancestor component, in addition to objects that are bound in its own modules. On the other hand, objects bound in parent components can’t depend on those bound in subcomponents; nor can objects bound in one subcomponent depend on objects bound in sibling subcomponents.

最佳答案

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

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

作为旁注,我必须警告您,您尝试做的事情可能会在未来引起大麻烦:通过第三方框架耦合模块的内部实现很少是一个好主意。

关于java - Dagger2 在几个 gradle 模块中拆分应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43206637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com