2016-11-17 6 views
0

Я пытаюсь пройти через этот андроид-архитектуры образец кода: - https://github.com/googlesamples/android-architecture/tree/todo-mvp-dagger/todoappНевозможно понять компонент (TasksRepositoryComponent) в Android-архитектуры образца ToDo-МВП-кинжалом

Я прочитал эту инструкцию, а также - https://google.github.io/dagger/users-guide

Это код в TasksRepositoryComponent

@Singleton 
@Component(modules = {TasksRepositoryModule.class, ApplicationModule.class}) 
public interface TasksRepositoryComponent { 

    TasksRepository getTasksRepository(); 
} 

ToDoApplication бее ч расширяет применение имеет этот код в OnCreate() -

mRepositoryComponent = DaggerTasksRepositoryComponent.builder() 
       .applicationModule(new ApplicationModule((getApplicationContext()))) 
       .build(); 

Я не могу понять несколько вещей: -

  1. Почему не делает TasksRepositoryComponent есть метод инъекционные(), как и другие компоненты в приложение?

  2. Почему не ToDoApplication также вызывает метод methodRepositoryModule() в DaggerTasksRepositoryComponent перед build()? Почему этого не требуется?

Есть ли место, где я могу найти хорошую документацию о правилах, которые нужно соблюдать при использовании кинжала2?

+1

Они могут помочь: http://stackoverflow.com/questions/40562481/dagger-2-lack-of-constructor-injection- пример/40563125 # 40563125 и http://stackoverflow.com/questions/40545075/dagger2-and-android/40546157#40546157, хотя есть много вещей, которые я еще не использую ('@ IntoSet',' @ Binds', и т.д.) – EpicPandaForce

ответ

0

Почему TasksRepositoryComponent нет inject() метода, как других компонентов в приложении?

TaskRepositoryComponent является родительским компонентом с единственной целью публикации связывания для TaskRepository к его компонентам мере зависит. Зависимые компоненты наследуют привязку для TaskRepository и могут вводить ее в места инъекции. Посмотрите на documentation for dependent components для получения дополнительной информации об этой функции.

Почему не ToDoApplication вызывать метод tasksRepositoryModule() в DaggerTasksRepositoryComponent перед тем build()? Почему этого не требуется?

TasksRepositoryModule имеет стандартный конструктор по умолчанию без параметров, поэтому сгенерированный компонент может инициализировать его без его явного построения в построителе. Посмотрите на сгенерированный код в DaggerTasksRepositoryComponent - вы увидите что-то вроде

if (tasksRepositoryModule == null) { 
    tasksRepositoryModule = new TasksRepositoryModule(); 
}