Кинжал 2: Как внедрить объект, созданный в методе @Provides?
Я получил это:
Bike.java
public class Bike {
String serial;
@Inject
Wheels wheels;
public Bike(String serial) {
this.serial = serial;
}
}
BikeModule.java
@Module
public class BikeModule {
@Provides
public Bike provideBike() {
return new Bike("BIK-001");
}
@Provides
public Wheels provideWheels() {
return new Wheels("WLS-027");
}
}
BikeComponent.java
@Component(modules = BikeModule.class)
public interface BikeComponent {
Bike bike();
}
Теперь вот проблема: когда я звоню BikeComponent.bike()
Достаю байк с серийником BIK-001
, как и предполагалось, но колеса не впрыскиваются. Однако, если я аннотирую Bike
конструктор с @Inject
и удалите BikeModule.provideBike()
метод, колеса впрыскиваются. Таким образом, проблема заключается в том, чтобы ввести объект, созданный в @Provides
метод, а не созданный самим Кинжалом.
Есть ли способ сказать Dagger, чтобы ввести предоставленный объект?
1 ответ
Решение
Перепишите так:
public class Bike {
private final String serial;
private final Wheels wheels;
@Inject
public Bike(String serial, Wheels wheels) {
this.serial = serial;
this.wheels = wheels;
}
}
@Module
public final class BikeModule {
@Provides
public static Bike provideBike(Wheels wheels) {
return new Bike("BIK-001", wheels);
}
@Provides
public static Wheels provideWheels() {
return new Wheels("WLS-027");
}
}