การพึ่งพาส่วนประกอบ - ใช้สิ่งนี้เมื่อคุณต้องการให้สององค์ประกอบเป็นอิสระ 
ส่วนประกอบย่อย - ใช้สิ่งนี้เมื่อคุณต้องการให้สององค์ประกอบคู่กัน
ฉันจะใช้ด้านล่างตัวอย่างเพื่ออธิบายการพึ่งพาชิ้นส่วนและส่วนประกอบย่อย บางจุดที่ควรสังเกตเกี่ยวกับตัวอย่าง ได้แก่ :
SomeClassA1สามารถสร้างได้โดยไม่ต้องพึ่งพาใด ๆ ModuleAให้และตัวอย่างของSomeClassA1ผ่านทางprovideSomeClassA1()วิธีการ 
SomeClassB1SomeClassA1ไม่สามารถสร้างได้โดยไม่ต้อง ModuleBสามารถระบุอินสแตนซ์ได้SomeClassB1ก็ต่อเมื่ออินสแตนซ์SomeClassA1ถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังprovideSomeClassB1()เมธอด 
@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;
    }
}
Dagger จะดูแลการส่งผ่านอินสแตนซ์ของSomeClassA1เป็นอาร์กิวเมนต์ไปยังprovideSomeClassB1()วิธีการModuleBเมื่อใดก็ตามที่ModuleBมีการเตรียมใช้งานการประกาศ Component / Subcomponent เราจำเป็นต้องสั่งให้ Dagger รู้วิธีเติมเต็มการพึ่งพา ซึ่งสามารถทำได้โดยการใช้การพึ่งพาชิ้นส่วนหรือองค์ประกอบย่อย
การพึ่งพาส่วนประกอบ
สังเกตประเด็นต่อไปนี้ในตัวอย่างการอ้างอิงส่วนประกอบด้านล่าง:
ComponentBต้องกำหนดการพึ่งพาผ่านdependenciesวิธีการในการใส่@Componentคำอธิบายประกอบ   
ComponentAModuleBไม่จำเป็นต้องประกาศ สิ่งนี้ทำให้ทั้งสององค์ประกอบเป็นอิสระ 
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();
    }
}
SubComponent
สังเกตประเด็นต่อไปนี้ในตัวอย่าง SubComponent:
- เนื่องจาก
ComponentBไม่ได้กำหนดการพึ่งพาModuleAจึงไม่สามารถอยู่อย่างอิสระได้ จะขึ้นอยู่กับส่วนประกอบที่จะให้ไฟล์ModuleA. ดังนั้นจึงมี@Subcomponentคำอธิบายประกอบ 
ComponentAได้ประกาศModuleBผ่านวิธีการเชื่อมcomponentB()ต่อ สิ่งนี้ทำให้ทั้งสององค์ประกอบคู่กัน ในความเป็นจริงComponentBสามารถเริ่มต้นผ่านทางComponentA. 
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);
    }
}