У меня есть приложение, которое я создаю и которое использует Room for DB и архитектуру MVVM.Я добавил объект Kotlin, который имеет функцию, которая сохраняет данные в базе данных Room.
Поскольку нет фрагмента или действия, нет представления, поэтому мне интересно, имеет ли смысл использовать процесс, который я использую,?Он работает, но только потому, что он работает, не означает его правильность.
Поскольку объекты Kotlin не имеют конструкторов, я добавил функцию, которая устанавливает ViewModel объекта, которая, в свою очередь, дает мне доступ к хранилищу и, таким образом,получение доступа к сохранению в базе данных.
Когда мое разобщение в понимании заключается в том, что я вызываю эту функцию в файле приложения (это тот же файл, который устанавливает Kodein), поэтому я не могу вызватьViewModelProviders.of функции, поскольку я не внутри фрагмента / деятельности.Вместо этого я вызываю функцию ViewModelFactory.create.Я не могу помочь, но чувствую, что это не возвращает тот же ViewModel, который вызывает остальная часть приложения?
Гуру Android Я прошу вашего совета ...
Пожалуйста, сообщите, если яна правильном пути или полностью к обеду?
Кроме того, кто-то может объяснить разницу в кодеине между связыванием и связыванием с?
Приложение (вызывается из манифеста Android)
class SampleIdeaApplication: Application(), KodeinAware {
override fun onCreate() {
val sampleIdeaViewModelFactory:SampleIdeaViewModelFactory by instance()
val sampleIdeaViewModel: SampleIdeaViewModel = sampleIdeaViewModelFactory.create(SampleIdeaViewModel::class.java)
SampleIdea.setSampleIdeaViewModel(sampleIdeaViewModel)
}
}
SimpleIdeaViewModelFactory
class SampleIdeaViewModelFactory(private val sampleIdeaRepository: SampleIdeaRepository) : ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return SampleIdeaViewModel(sampleIdeaRepository) as T
}
}
SampleIdea (Object)
object SampleIdea {
private lateinit var sampleIdeaViewModel: SampleIdeaViewModel
fun insertIntoSampleIdeaDatabase(sie:SampleIdeaEntity) {
sampleIdeaViewModel.upsert(sie)
}
fun setSampleIdeaViewModel(sivm: SampleIdeaViewModel) {
sampleIdeaViewModel = sivm
}
}
Еще раз помните, что это очень упрощенная версия фактического кода (реальный код сохраняет намного больше информации, вставка в забаву является частной, и есть другие публичные забавы, которые вызывают это.