2016-04-26 80 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