Кинжал: нужна помощь в понимании

У меня есть некоторые непонимания того, как работает этот кинжал:

  1. Есть только два способа удовлетворить зависимость: возвращает ли метод @Provide экземпляр, или класс должен иметь аннотацию @Singleton, верно? Должен ли конструктор класса иметь аннотацию @Inject в последнем случае?

  2. Как я вижу, ObjectGraph генерирует весь материал для инъекций. И сказано, что его inject(T instance) следует вызывать для ввода полей. Однако я могу просто аннотировать свое поле с помощью @Inject, и оно идет (класс поля - @Singletone). ObjectGraph не нужен для удовлетворения такой зависимости, верно?

  3. А как же injects{} в @Module, что конкретно это дает? Пожалуйста, приведите пример преимущества, когда вы сохраняете список всех инъекционных классов.


person Dmitry Gryazin    schedule 02.02.2015    source источник


Ответы (1)


  1. Да, есть два пути: @Provide методы в модулях и @Singleton классы с @Inject в конструкторе.

Должен ли конструктор класса иметь аннотацию @Inject в последнем случае?

Да, иначе Dagger не создал бы объект.

  1. Я не думаю, что @Singleton с инъекцией поля может работать. Поскольку @Singleton в классе с внедрением конструктора означает, что Dagger отвечает за сохранение одного экземпляра этого класса. И он может создать этот класс с помощью внедрения конструктора, если все зависимости удовлетворены. Тем не менее, @Singleton с внедрением поля кажется мне неправильным, потому что сохранение одного экземпляра этого класса теперь является обязанностью пользователя. Dagger не может сам создать экземпляр этого объекта.
    Вы уверены, что эта конфигурация компилируется и работает? И если это поля проверки @Inject, они должны быть нулевыми, насколько я понимаю.

  2. #P4# <блочная цитата> #P5#

Этот набор помогает Dagger выполнять статический анализ для обнаружения ошибок и неудовлетворенных зависимостей.
Вы можете найти несколько примеров в эта тема.

person Kirill Boyarshinov    schedule 03.02.2015