Корпус кинжала - PullRequest
       4

Корпус кинжала

0 голосов
/ 26 мая 2018

Я довольно новичок в Dagger и нахожу немного сложным для понимания тело компонента, имея два конкретных вопроса, связанных с реализацией компонента:

1)

  @Singleton
    @Component(modules = { UserModule.class, BackEndServiceModule.class })
    public interface MyComponent {

        BackendService provideBackendService();// Line 1

        void inject(Main main); // Line 2
    }

Что такоецель линии 2?также будет ли создан экземпляр backendService, даже если строка 1 будет удалена?

, а также в приведенном ниже коде, где генерируется реализация вышеуказанного интерфейса, что на самом деле делает component.inject (this)?

public class Main {

@Inject
BackendService backendService; // 

private MyComponent component;

private Main() {
    component = DaggerMyComponent.builder().build();
    component.inject(this);
}

private void callServer() {
    boolean callServer = backendService.callServer();
    if (callServer) {
        System.out.println("Server call was successful. ");
    } else {
        System.out.println("Server call failed. ");
    }
}

, а также почему бэкэнд-сервис не был получен с помощью component.provideBackendService ()

1 Ответ

0 голосов
/ 26 мая 2018

Какова цель void inject(Main main);?

Это позволяет выполнять field injection для конкретного класса Main, предполагая, что Main - это класс, который Dagger

не может создать , где генерируется реализация вышеуказанного интерфейса, что на самом деле делает component.inject (this)?

ИспользуетсяMemberInjector s для вставки защищенных пакетов или открытых полей, помеченных @Inject.Вы можете увидеть реализацию метода inject(Main) в классе DaggerMyComponent.


Конечно, , если возможно , лучше сделать так, чтобы:

1.) Main не создает / не знает о своем собственном инжекторе

2.) Main создается компонентом Dagger, а используется конструктор @Inject

@Singleton
public class Main {    
    private final BackendService backendService;

    @Inject
    Main(BackendService backendService) {
        this.backendService = backendService;
    }
}
...