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

Dagger 2子组件与组件依赖关系

农永宁
2023-03-14

在什么情况下使用组件依赖项而不是子组件依赖项是有益的?为什么?

共有1个答案

夏理
2023-03-14

组件依赖关系--当您希望保持两个组件独立时,请使用此功能

子组件-当你想要保持两个组件的耦合时使用它。

我将使用下面的示例来解释组件依赖关系和子组件。关于该示例,一些值得注意的地方是:

    null
@Module
public class ModuleA {
    @Provides
    public SomeClassA1 provideSomeClassA1() {
        return new SomeClassA1();
    }
}

@Module
public class ModuleB {
    @Provides
    public SomeClassB1 provideSomeClassB1(SomeClassA1 someClassA1) {
        return new SomeClassB1(someClassA1);
    }
}

public class SomeClassA1 {
    public SomeClassA1() {}
}

public class SomeClassB1 {
    private SomeClassA1 someClassA1;

    public SomeClassB1(SomeClassA1 someClassA1) {
        this.someClassA1 = someClassA1;
    }
}

在下面的组件依赖关系示例中注意以下几点:

  • componentB必须通过@component注释上的dependencies方法定义依赖项。
  • componentA不需要声明moduleB。这使两个组件保持独立。
public class ComponentDependency {
    @Component(modules = ModuleA.class)
    public interface ComponentA {
        SomeClassA1 someClassA1();
    }

    @Component(modules = ModuleB.class, dependencies = ComponentA.class)
    public interface ComponentB {
        SomeClassB1 someClassB1();
    }

    public static void main(String[] args) {
        ModuleA moduleA = new ModuleA();
        ComponentA componentA = DaggerComponentDependency_ComponentA.builder()
                .moduleA(moduleA)
                .build();

        ModuleB moduleB = new ModuleB();
        ComponentB componentB = DaggerComponentDependency_ComponentB.builder()
                .moduleB(moduleB)
                .componentA(componentA)
                .build();
    }
}

注意子组件示例中的以下几点:

    null
public class SubComponent {
    @Component(modules = ModuleA.class)
    public interface ComponentA {
        ComponentB componentB(ModuleB moduleB);
    }

    @Subcomponent(modules = ModuleB.class)
    public interface ComponentB {
        SomeClassB1 someClassB1();
    }

    public static void main(String[] args) {
        ModuleA moduleA = new ModuleA();
        ComponentA componentA = DaggerSubComponent_ComponentA.builder()
                .moduleA(moduleA)
                .build();

        ModuleB moduleB = new ModuleB();
        ComponentB componentB = componentA.componentB(moduleB);
    }
}
 类似资料:
  • 问题内容: 这是我目前拥有的并且可以正常工作: 现在,我想添加另一个依赖项。我将其更改为: 但是现在我收到此错误消息: FragmentFacebookLoginComponent依赖于多个作用域组件 我该如何解决?我如何有多个依赖关系? 如果我从一个组件中删除范围,则会收到此错误消息: AnotherComponent(无作用域)不能依赖范围内的组件 问题答案: 最后,我创建了一个具有正确范围的

  • 我的应用程序中有以下Dagger2架构: 其中:AppComponent: UserComponent: ActivityComponent: ChatComponent: 首先,如何将不同的注入到类中?要么是应用程序,要么是活动?? 其次,我在编译代码时遇到了一个奇怪的问题,错误是: 错误:(23,10)错误:br.com.animaeducacao.ulife.domain.interacto

  • 与Build Type类似,Product Flavor也会通过它们自己的sourceSet提供代码和资源。 上面的例子将会创建4个sourceSet: android.sourceSets.flavor1 位于src/flavor1/ android.sourceSets.flavor2 位于src/flavor2/ android.sourceSets.androidTestFlavor1 位

  • Apache ShardingSphere 在数据库治理模块使用 SPI 方式载入数据到配置中心和注册中心,进行实例熔断和数据库禁用。 目前,Apache ShardingSphere 内部支持 ZooKeeper,Etcd等常用的配置中心/注册中心。 此外,开发者可以使用其他第三方组件,并通过 SPI 的方式注入到 Apache ShardingSphere,从而使用该配置中心和注册中心,实现数

  • SOFARPC 使用了一些三方开源组件,他们分别是: 一些主要依赖: Netty under Apache License 2.0 SLF4j under the MIT License SOFA Bolt under Apache License 2.0 Javassist under Apache License 2.0 Resteasy under Apache License 2.0 SO

  • # 服务和组件 组件(components), 服务(services) 和依赖(dependencies): 和其他技术一样, Windsor 有一些基础概念你需要理解以便正确的使用它。不要害怕 - 他们可能有吓人复杂的名称和抽象的定义,但是掌握他们十分简单。 服务 :information_source: Windsor中的服务 和 WCF 服务: 术语服务(service)的使用十分泛滥,