Итак, вот что я знаю из doc
- Dagger Android под капотом создает подкомпонент для каждого действия, помеченного
ContributesAndroidInjector
- Вы можете применить настраиваемую область к методу, где
ContributesAndroidInjector
аннотируется как - Если два дочерних подкомпонента имеют одинаковую область действия, они все равно будут иметь разные экземпляры области действия
- ЕслиДеятельность находится в подкомпоненте, она может иметь свой собственный подкомпонент, который может содержать фрагменты.Эти фрагменты будут иметь общие экземпляры областей действия, которые есть у действия.
Теперь мой вопрос: как сделать, чтобы одно действие было субкомпонентом другого действия с помощью Dagger Android?
Я хочу сделатьэто потому, что я хочу достичь таких вещей, как @ UserScope / @ SessionScope.
С это Я знаю, что могу сделать это только с помощью Dagger, а не Dagger Android.Но с Dagger Android у вас может быть только Приложение (которое является AndroidInjector), чтобы внедрить Activity.Вы не можете использовать действие в качестве держателя или хоста родительского подкомпонента для внедрения другого действия.
Правильно ли я понимаю?
05/14/2018 Обновление:
В итоге я избавился от Dagger Android.Так что не более ContributesAndroidInjector
, просто чистый кинжал.И чтобы ввести Activity / Fragment, я использую способ, который рекомендуется здесь .Это будет что-то вроде этого:
class MyActivity : AppCompatActivity() {
private val factory: ViewModelProvider.Factory = Injector.myCustomScope().factory()
}
И мы пытаемся сделать так, чтобы фабрика была единственной вещью, которая нужна Деятельности / Фрагменту.
Пока это было здорово.