169 похожих чатов

Как мне прокинуть реализацию интерфейса во ViewModel(в конструктор) без использования

HILT?с ним всё изи и просто,а без приходится создавать фактори. Caused by: java.lang.InstantiationException: java.lang.Class<com.example.cleantest22decabr.viewModel.MainViewModel> has no zero argument constructor - вот такую ошибку ловлю ожидаемо. неужели надо будет всё время в фактори добавлять интерфейсы которые могут быть в конструкторе?какие есть элегантные пути решения проблемы?

34 ответов

27 просмотров

Там и хилт под капотом наверняка строит фактори. На сколько я знаю, без фабрики это не сделать, в дагере руками приходилось писать сетап фабрики

Anatoliy-Kernokus Автор вопроса

то есть это нормальная практика писать кучу фактори для своих viewModel-й?

По хорошему - один класс фабрики и через нее будут ходить все модели. В конструктор карту класс-вм скармливают. И тогда может быть по фабрике на каждую вм создано и выкинуто после получения вм

Anatoliy-Kernokus Автор вопроса

спасибо

Anatoliy-Kernokus Автор вопроса

а нет примера кода где именно один класс фабрики создаётся?

https://github.com/Legion1900/Movies-App/blob/master/app/src/main/java/com/legion1900/moviesapp/view/base/ViewModelFactory.kt

Anatoliy-Kernokus Автор вопроса

cпасибо, буду вкуривать

Anatoliy-Kernokus Автор вопроса

так. извиняюсь,но снова вопрос. При создании фактори в фрагменте или активити всё равно надо задавать параметры конструктора фактори. Если я кидаю реализацию интерфейса, то я не могу её инжектить в поля активити или фрагмента. То есть так не получится,нет?

Не стоит. Инжектить в контроллер нужно уже готовую фабрику. Пусть di где-то сам разпетляет, что в эту фабрику подать

А почему такие вопросы стоят? С хилта на ручное управление переезд??

Anatoliy-Kernokus Автор вопроса

хилт хорош, очень нравится,но я хочу понять как руками это всё сделать.

Anatoliy-Kernokus Автор вопроса

всё равно надо будет же в аргументах тут прописывать что я даю фабрике, независимо от di

О, так, могу тебе скинуть ссылку на поделку свою, я там руками di делал. Далеко не идеально, я в курсе. Но вдруг поможет. Надо?

Anatoliy-Kernokus Автор вопроса

давай. люди же всё равно в большинстве своём на проекте живут без хилта,то есть также сталкиваются с этой проблемой.

Можешь попробовать вообще с дагера начать, если с ним не работал. Там фабрику тоже самому писать нужно, только контейнеры за тебя строит и удерживает в памяти граф зависимостей

Anatoliy-Kernokus Автор вопроса

у меня сейчас и так даггер без хилта

В целом, живут на дагере или koin. Руками не пишут такое. Вернее пишут, но не так часто. Глянь вот этот пакет, там контейнеры содержат все мясо. Ну и лучше клонировать и в ide скакать по всем классам, которые di юзает https://github.com/Legion1900/dchat/tree/main/app/src/main/java/com/legion1900/dchat/view/main/di

Anatoliy-Kernokus Автор вопроса

изначальный вопрос вообще в том,как прокинуть реализацию интерфейса во ViewModel(через Binds ). Кроме веселья с Factory и релакса с Хилтом путей нет?

Только фабрика. Ты в нее уже готовые вм или обертки, которые на заказ строят вм, прокидываешь будешь

Anatoliy-Kernokus Автор вопроса

но фабрике же всё равно надо будет на вход передавать в конструктор этот интерфейс. чет я походу в 3 соснах заблудился

Фабрику пусть di строит, это будут его проблемы

Anatoliy-Kernokus Автор вопроса

И даже там все равно в конструкторе же надо передавать параметр

А в чём проблема?

Если в дагере, то ты передаешь в фабрику карту (как в первой ссылке), а конструктор фабрики пометишь @Inject, тогда найти параметры в графе будет задачей дагера, а не твоей. Тебе только мапу составить через @IntoMap надо

Anatoliy-Kernokus Автор вопроса

Но в первой ссылке фактори конструктор без инжекта,там только мапа.

Вот тут глянь: https://habr.com/ru/post/337320/

Anatoliy-Kernokus Автор вопроса

Понял, спасибо

Anatoliy-Kernokus Автор вопроса

Как думаете,а если инжектить viewModel саму через даггер,то это нормальный подход и избавляет от этой проблемы создания фабрик и ТД?

Никак нет. У тебя кто удерживает VM и дергает ее onCleared? Фреймворк. Нужно как-то зарегистрировать вм у фреймворка, для чего эти танцы с бубном вокруг ViewModelProvider, которому так нужна фабрика

Anatoliy-Kernokus Автор вопроса

Беда

Да не, просто с фабрикой чуть возни будет один раз

Anatoliy-Kernokus Автор вопроса

Выглядит как не чуть.а по факту - надо разбираться(или юзать хилт)

Лучше разобраться, в хилте магии нет, хилт юзается не так часто на проде пока, так что понимать, как это делается стоит

Anatoliy-Kernokus Автор вопроса

Понял,надеюсь разберусь по статье

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта