Интерфейс @inject не является реализацией этого в dagger2 android - PullRequest
0 голосов
/ 13 мая 2018

Я хочу внедрить интерфейс и кинжал автоматически внедрить мою реализацию, но я получил ошибку

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 работающий

...