Phụ thuộc thành phần - Sử dụng phần này khi bạn muốn giữ hai thành phần độc lập. 
Các thành phần con - Sử dụng phần này khi bạn muốn giữ hai thành phần được ghép nối.
Tôi sẽ sử dụng dưới đây ví dụ để giải thích phần phụ thuộc và thành phần phụ . Một số điểm đáng chú ý về ví dụ này là:
SomeClassA1có thể được tạo ra mà không có bất kỳ sự phụ thuộc. ModuleAcung cấp và ví dụ SomeClassA1thông qua provideSomeClassA1()phương thức. 
SomeClassB1không thể được tạo ra mà không có SomeClassA1. ModuleBcó thể cung cấp một thể hiện SomeClassB1chỉ khi một thể hiện của SomeClassA1được truyền dưới dạng đối số cho provideSomeClassB1()phương thức. 
@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 sẽ đảm nhiệm việc chuyển thể hiện của SomeClassA1một đối số thành provideSomeClassB1()phương thức ModuleBbất cứ khi nào khai báo Thành phần / Thành phần con ModuleBđược khởi tạo. Chúng ta cần hướng dẫn Dagger cách thực hiện sự phụ thuộc. Điều này có thể được thực hiện bằng cách sử dụng phần phụ thuộc hoặc Tiểu hợp phần .
Thành phần phụ thuộc
Lưu ý các điểm sau trong ví dụ phụ thuộc Thành phần bên dưới:
ComponentBphải xác định sự phụ thuộc thông qua dependenciesphương thức @Componentchú thích.   
ComponentAkhông cần phải khai báo ModuleB. Điều này giữ cho hai thành phần độc lập. 
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();
    }
}
Hợp chất phụ
Lưu ý các điểm sau trong ví dụ SubComponent:
- Như 
ComponentBchưa xác định sự phụ thuộc vào ModuleA, nó không thể sống độc lập. Nó trở nên phụ thuộc vào thành phần sẽ cung cấp ModuleA. Do đó nó có một @Subcomponentchú thích. 
ComponentAđã khai báo ModuleBthông qua phương thức giao diện componentB(). Điều này làm cho hai thành phần được ghép nối. Trong thực tế, ComponentBchỉ có thể được khởi tạo thông qua 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);
    }
}