2016-04-26 2 views
0

Я играю с Dagger2, чтобы понять, как это работает. Я только что создал базовый проект «hello dagger2», но он сбойHello 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); 
    } 
} 

Compoment:

@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 нужны объекты типа Water и Flour. Вам необходимо добавить методы @Provide в свой модуль, которые предоставляют Water и Flour.

Например:

@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 Вода обеспечивает водоснабжение (количество int) { возвращение новой воды (количество); } – JoCuTo

+0

Ошибка: (13, 11) error: java.lang.Integer не может быть предоставлен без конструктора Inject или из метода Provides-annotated. com.example.llisas.testingdagger2.module.BreadModule.provideBread (com.example.llisas.testingdagger2.model.Water water, com.example.llisas.testingdagger2.model.Flour flour) [параметр: com.example.llisas .testingdagger2.model.Water water] com.example.llisas.testingdagger2.module.BreadModule.provideWater (int quantity) [parameter: int quantity] – JoCuTo

+0

Пока ваши методы имеют параметры (в данном случае целые числа), вы будете необходимо поддерживать их до тех пор, пока метод обеспечения не будет иметь параметров. С целыми числами вы должны добавить аннотацию @Name («description»), чтобы различать разные типы целых чисел, которые вы предоставляете. – AgileNinja

Смежные вопросы