Size: a a a

2019 November 27

IS

Ivan Sablin in Dagger 2
а object в котлин это он и есть.
источник

IS

Ivan Sablin in Dagger 2
2. В том то и дело, что он его не инициализирует, я его туда передаю, чтобы в субкомпонентах тоже если что был доступ к applicationContext
источник

IG

Ilya Gulya in Dagger 2
Ivan Sablin
Ну просто изначально было, что это синглтон
Вы не можете сделать Application котлиновским синглтоном, если кратко. Класс Application инициализируется системой.
источник

IS

Ivan Sablin in Dagger 2
оу, ну окей
источник

IG

Ilya Gulya in Dagger 2
Ivan Sablin
Привет! Сделал BaseApplication objectом(заменил класс на object), теперб даггер ругается, говорит. что не может вызвать конструктор. Зачем ему это надо, ведь я его передаю в модуль
Unable to instantiate application com.merseyside.partyapp.CalcApplication: java.lang.IllegalAccessException: void com.merseyside.partyapp.CalcApplication.<init>() is not accessible from java.lang.Class<android.app.AppComponentFactory>
Этот эксепшен говорит о том что у системы не получается вызвать конструктор у класса Application, т.к. он private
источник

IS

Ivan Sablin in Dagger 2
ну да, эт оя понял, что он хочет. просто я не совсем понял зачем, там есть провайд метод для Application, но он его берет из конструктора AppModule
источник

IS

Ivan Sablin in Dagger 2
вот и вопрос зачем он хочет его проинициализировать
источник

IG

Ilya Gulya in Dagger 2
Ivan Sablin
вот и вопрос зачем он хочет его проинициализировать
Кто хочет проинициализировать?
источник

IS

Ivan Sablin in Dagger 2
dagger
источник

IG

Ilya Gulya in Dagger 2
Не хочет, я ошибся
источник

IS

Ivan Sablin in Dagger 2
понял, эт оне даггер вовсе
источник

IG

Ilya Gulya in Dagger 2
У вас до инициализации даггера даже не доходит, рушится раньше, на этапе создания Application системой
источник

IS

Ivan Sablin in Dagger 2
посмотрел нормально стектрейс, теперь понятно)
источник
2019 November 28

I

Igor in Dagger 2
ребят сделал создание VM в модуле используя следующий код                             @Provides
   fun createViewModel(
       fragment: UpdateFragment,
       viewModel: Provider<UpdateFragmentViewModel>
   ): IUpdateFragmentViewModel {
       return ViewModelProviders.of(fragment, object : ViewModelProvider.Factory {
           override fun <T : ViewModel?> create(modelClass: Class<T>): T {
               return viewModel.get() as T
           }
       }).get(UpdateFragmentViewModel::class.java)
все работает, но ViewModelProvider is deprecated, пытался переделать вот так ViewModelProvider.NewInstanceFactory().create(UpdateFragmentViewModel::class.java) не работает, можно ещё так сделать                                              @Binds
   abstract fun createViewModel(vm: UpdateFragmentViewModel): IUpdateFragmentViewModel
и все работает, почему собственно не работает второй метод и является ли третий метод корректным?
источник

I

Igor in Dagger 2
вообще странно, что работает третий метод))
источник

NT

Nick Two in Dagger 2
Если даггер знает как создавать UpdFragVM то ему достаточно Binds, чтобы понять как сделать IUpdFragVM
источник

NT

Nick Two in Dagger 2
Да, вполне корректный, я бы сказал предпочтителтный, если нет особой логики при создании инстанса
источник

I

Igor in Dagger 2
Nick Two
Если даггер знает как создавать UpdFragVM то ему достаточно Binds, чтобы понять как сделать IUpdFragVM
так меня смутил тот факт что при создании android ViewModel нужна фабрика и прочие танцы с бубном, а тут без проблем собралось все с Binds
источник

NT

Nick Two in Dagger 2
Igor
так меня смутил тот факт что при создании android ViewModel нужна фабрика и прочие танцы с бубном, а тут без проблем собралось все с Binds
Я не знаю VM, тогда чтото не то) даггер просто вызовет аннотированый конструктов у класса источника, в случае с binds
источник

NT

Nick Two in Dagger 2
Думаю тут проще создать инстанс самостоятельно (в scratch, например), убедиться что на выходе получается нужный тип и после этого засунуть в даггер
источник