Hello Dagger2 在 Android Studio 上崩溃

Hello Dagger2 crashes on Android Studio

我正在玩 Dagger2 以了解它的工作原理。我刚刚创建了一个 "hello dagger2" 基本项目,但它崩溃了

我有三个 classes:面包、面粉和水。面包依赖于面粉和水。

class面包:

    public class Bread {

    private Water water;
    private Flour flour;

    @Inject
    public Bread (Water water, Flour flour){
        this.water = water;
        this.flour = flour;
    }
}

class水:

public class Water {

    int waterQuantity;

    public Water(int waterQuantity){
    this.waterQuantity = waterQuantity;
    }
}

class 面粉:

    public class Flour {

    private int flourQuantity;

    public Flour(int flourQuantity){
        this.flourQuantity = flourQuantity;
    }
}

我也实现了模块和组件

模块:

@Module
public class BreadModule {

    @Provides @Singleton
    Bread provideBread(Water water, Flour flour){
     return new Bread(water, flour);
    }
}

组件:

@Singleton
@Component (modules = {BreadModule.class})
public interface BreadComponent {

    Bread getBread();
}

我面临的错误是:

Error:(13, 11) error: com.example.llisas.testingdagger2.model.Water cannot be provided without an @Inject constructor or from an @Provides-annotated method. com.example.llisas.testingdagger2.module.BreadModule.provideBread(com.example.llisas.testingdagger2.model.Water water, com.example.llisas.testingdagger2.model.Flour flour) [parameter: com.example.llisas.testingdagger2.model.Water water]

我做错了什么?

在尝试提供 Bread 时,Dagger2 需要 WaterFlour 类型的对象。您需要在提供 WaterFlour.

的模块中添加 @Provide 方法

例如:

@Provides
Water provideWater() {
     return new Water(1); // instead of 1, you can add any other default value
}

如果你在这个方法中有一个整数,你也必须提供它,如下所示:

@Provides @Named("defaultWaterQuantity")
int provideWaterQuantity() {
    return 1;
}

@Provides
Water provideWater(@Named("defaultWaterQuantity") int waterQuantity){
     return new Water(waterQuantity);
}