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 需要 Water
和 Flour
类型的对象。您需要在提供 Water
和 Flour
.
的模块中添加 @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);
}
我正在玩 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 需要 Water
和 Flour
类型的对象。您需要在提供 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);
}