Как внедрить фабрику ViewModel с параметрами с помощью Koin?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как внедрить фабрику ViewModel с параметрами с помощью Koin?

Сообщение Anonymous »

Я пытаюсь внедрить фабрику 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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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