Я пытаюсь внедрить фабрику ViewModel с параметрами, используя Koin, но не нашел способа. Я прочитал документацию и увидел только материал Fragment Factory.
Я пытался повторить то, что я делаю с Kodein (код ниже)
ViewModelFactory
class ViewModelFactory(
private val context: Context,
private val apiClient: ApiClientClass
private val localDatabase: RoomDatabase
) : ViewModelProvider.Factory {
override fun create(modelClass: Class): T {
when {
modelClass.isAssignableFrom(AViewModel::class.java) -> {
return AViewModel(
context,
apiClient,
localDatabase
) as T
}
modelClass.isAssignableFrom(BViewModel::class.java) -> {
return BuildingsViewModel(
context,
apiClient,
localDatabase
) as T
}
else -> {
Timber.e("IllegalArgumentException Unknown class name. Add view model to your factory class!")
throw IllegalArgumentException("Unknown class name. Add view model to your factory class!")
}
}
}
}
Класс приложения
class ApplicationClass: Application(), KodeinAware {
override val kodein by Kodein.lazy {
import(androidXModule(this@ApplicationClass))
bind() from singleton { ApiClient() }
bind() from singleton {
val build = Room.databaseBuilder(
applicationContext,
SomeDatabase::class.java,
SomeDatabase.DATABASE_NAME
)
build.fallbackToDestructiveMigration().build()
}
bind() from singleton { SomeRepository(instance()) }
bind() from provider {
ViewModelFactory(
this@ApplicationClass, // Context
instance(), // ApiClient
instance() // RoomDatabase
)
}
}
}
Класс активности
import org.kodein.di.KodeinAware
import org.kodein.di.android.kodein
import org.kodein.di.generic.instance
class MainActivity : AppCompatActivity(), KodeinAware {
override val kodein by kodein()
private val factory: ViewModelFactory by instance()
private val viewModel: AViewModel by viewModels { factory }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// some code
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... using-koin
Как внедрить фабрику ViewModel с параметрами с помощью Koin? ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1716415120
Anonymous
Я пытаюсь внедрить фабрику ViewModel с параметрами, используя [b]Koin[/b], но не нашел способа. Я прочитал документацию и увидел только материал Fragment Factory.
Я пытался повторить то, что я делаю с Kodein (код ниже)
[b]ViewModelFactory[/b]
class ViewModelFactory(
private val context: Context,
private val apiClient: ApiClientClass
private val localDatabase: RoomDatabase
) : ViewModelProvider.Factory {
override fun create(modelClass: Class): T {
when {
modelClass.isAssignableFrom(AViewModel::class.java) -> {
return AViewModel(
context,
apiClient,
localDatabase
) as T
}
modelClass.isAssignableFrom(BViewModel::class.java) -> {
return BuildingsViewModel(
context,
apiClient,
localDatabase
) as T
}
else -> {
Timber.e("IllegalArgumentException Unknown class name. Add view model to your factory class!")
throw IllegalArgumentException("Unknown class name. Add view model to your factory class!")
}
}
}
}
[b]Класс приложения[/b]
class ApplicationClass: Application(), KodeinAware {
override val kodein by Kodein.lazy {
import(androidXModule(this@ApplicationClass))
bind() from singleton { ApiClient() }
bind() from singleton {
val build = Room.databaseBuilder(
applicationContext,
SomeDatabase::class.java,
SomeDatabase.DATABASE_NAME
)
build.fallbackToDestructiveMigration().build()
}
bind() from singleton { SomeRepository(instance()) }
bind() from provider {
ViewModelFactory(
this@ApplicationClass, // Context
instance(), // ApiClient
instance() // RoomDatabase
)
}
}
}
[b]Класс активности[/b]
import org.kodein.di.KodeinAware
import org.kodein.di.android.kodein
import org.kodein.di.generic.instance
class MainActivity : AppCompatActivity(), KodeinAware {
override val kodein by kodein()
private val factory: ViewModelFactory by instance()
private val viewModel: AViewModel by viewModels { factory }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// some code
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78520119/how-to-inject-a-viewmodel-factory-with-parameters-using-koin[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия