2016-04-26 83 views
0

我在玩Dagger2以了解它是如何工作的。我刚刚创建了一个“hello dagger2”基本项目,但它崩溃你好Dagger2在Android Studio上崩溃

我有三个类:面包,面粉和水。面包依赖于面粉和水。

类面包:

public class Bread { 

    private Water water; 
    private Flour flour; 

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

类水:

public class Water { 

    int waterQuantity; 

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

类面粉:

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]

我做错了吗?

回答

0

在试图提供Bread时,Dagger2需要WaterFlour类型的对象。您需要在模块中添加@Provide方法,该方法提供了WaterFlour

例如:

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

谢谢,同时制作了方法,接收的整数(数量作为参数)和其他错误得到。提供Singleton Water provideWater(int quantity){ return new Water(quantity); } – JoCuTo

+0

错误:(13,11)错误:无法使用Inject构造函数或提供注释的方法提供java.lang.Integer。 (com.example.llisas.testingdagger2.model.Water water,com.example.llisas.testingdagger2.model.Flour flour) [参数: .testingdagger2.model.Water水] com.example.llisas.testingdagger2.module.BreadModule.provideWater(INT数量) [参数:INT数量] – JoCuTo

+0

只要你的方法有参数(在这种情况下,整数),你会需要继续提供它们直到提供方法没有参数。对于整数,你必须添加@Name(“description”)注释来区分你正在提供的不同类型的整数 – AgileNinja