Я хочу внедрить интерфейс и кинжал автоматически внедрить мою реализацию, но я получил ошибку
public interface HouseInterface {
String sayHello();}
* реализация интерфейса ниже *
public class Stark implements HouseInterface{
@Inject
public Stark(){}
@Override
public String sayHello() {
return "stark";
}
}
интерфейс дома mosule
@Module public class HouseModule {
@Provides
public HouseInterface getHouse(Stark stark){
return stark;
}
}
* компонент дома: *
@Component(modules = HouseModule.class) interface HouseComponent {
HouseInterface getHouse();
}
War.class:
public class War {
@Inject
public War() {
}
//#1
//this not working
@Inject
HouseInterface houseInterface;
//this works
//#2
// @Inject
//Stark stark;
//#3
// this works//HouseComponent houseComponent = DaggerHouseComponent.builder().houseModule(new HouseModule()).build();
//HouseInterface houseInterface = houseComponent.getHouse();
public String getHouseName() {
return houseInterface.sayHello();
}
* *} Тысяча двадцать-один
Класс WarComponent
@Component
public interface WarComponent {
War getWar();
void inject(War war);
}
когда я тестирую код с помощью следующих кодов:
@Test
public void printNameTest() {
String expected = "stark";
WarComponent component = DaggerWarComponent.create();
War war= component.getWar();
Assert.assertEquals(war.getHouseName(), expected);
}
если в классе War мы используем # 1 для инъекции, не работает, но если использовать # 2 или # 3, которые в вышеприведенных кодах комментируются, инъекция не работает,
У кого-нибудь есть идеи?
потому что я не хочу, чтобы war.class зависел от Stark.class, и я хочу, чтобы он зависел только от HpuseInterface, поэтому мне нужен # 1 работающий