@AssistedInject в ViewModel с использованием Dagger (НЕ Hilt, просто Dagger) не компилируется: невозможно предоставить бAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 @AssistedInject в ViewModel с использованием Dagger (НЕ Hilt, просто Dagger) не компилируется: невозможно предоставить б

Сообщение Anonymous »


Я использую Android Studio — Dagger 2.35.1 (не Hilt, просто Dagger), внедрение ViewModel отлично работает с использованием шаблона @Injectstructor(), все это весело и весело, но я передаю идентификатор через функцию для модель представления, которая мне не нравится, поэтому теперь я пытаюсь реализовать параметр @Assisted в ViewModel, чтобы ViewModel получала этот параметр во время построения, этот параметр входит в намерение действия.

После добавления шаблона конструктора @AssistedInject() во ViewModel кинжал теперь жалуется:

[Dagger/MissingBinding DetailsViewModel не может быть предоставлен без конструктора @Inject или метода с аннотацией @Provides

Я просмотрел все вопросы и примеры, но никто не объяснил полного решения или почему Dagger отправляет эту ошибку, они просто публикуют фрагменты кода, похоже, что Dagger даже не знает, как обрабатывать @AssistedInjection, на данный момент я у меня закончились идеи.

конструктор класса DetailsViewModel @AssistedInject( приложение: Приложение, репозиторий val: DetailsRepository, @Assisted val id: Строка, ) : BaseViewModel(приложение) { @AssistedFactory Interface Factory { fun create(@Assisted id: String) : DetailsViewModel } сопутствующий объект { @Suppress("UNCHECKED_CAST") веселая фабрика( фабрика: Фабрика, идентификатор: строка ) : ViewModelProvider.Factory { возвращаемый объект: ViewModelProvider.Factory { переопределить fun create(modelClass: Class): T = Factory.create(id) как T } } } класс DetailsActivity : AppCompatActivity() { @Инжект lateinit var viewModelFactory: DetailsViewModel.Factory частный lateinit var viewModel: DetailsViewModel переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) (приложение как MyApplication).appComponent.inject(this) val id = Intent.getStringExtra("ID").orEmpty() viewModel = ViewModelProvider(this, DetailsViewModel.factory( viewModelFactory, идентификатор ))[DetailsViewModel::class.java] } ViewModelModule.java

@Module публичный абстрактный класс ViewModelModule { @Binds @IntoMap @ViewModelKey(DetailsViewModel.class) абстрактная ViewModel связываниеDetailsViewModel (DetailsViewModel viewModel); } AppComponent.java
@Синглтон @Component(modules = {AppModule.class, .class, ViewModelModule.class}) общедоступный интерфейс AppComponent { void inject (активность DetailsActivity); }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»