Я хочу передать строку в ApiService с ViewModelFactory и инъекцией зависимостей Kodein, я привязал репозиторий к DI и передал экземпляр в ViewModelFactory, и моя проблема в том, что я не знаю, как передать строку, которая не связана До я с Кодейном раньше. Я создаю строковую переменную и передаю mobileNumber в ViewModel, изменяя его значение, и я хочу знать, как лучше всего это сделать. Вот упрощенный код:
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
orderViewModel = ViewModelProvider(this, orderViewModelFactory)
.get(orderViewModel::class.java)
buttonSubmitOrder.apply {
setOnClickListener {
val mobileNumber = textFieldMobileNumber.text.toString().trim()
registerOrder(mobileNumber)
}
}
}
private fun registerOrder(mobileNumber: String) = launch {
orderViewModel.mobileNumber = mobileNumber
val orderResponse = orderViewModel.orderResponse.await()
orderResponse.observe(viewLifecycleOwner, Observer { data ->
if (data == null) return@Observer
data.data?.let {
Log.i("***", it.toString())
}
})
}
В ViewModel:
class OrderViewModel(private val ordersRepository: OrdersRepository) : ViewModel() {
var mobileNumber = ""
val OrderResponse by lazyDeferred {
ordersRepository.registerOrder(getOrderRequest())
}
private fun getOrderRequest(): OrderRequest {
return OrderRequest(mobileNumber)
}
}
В моем классе приложения:
bind<OrderRepository>() with singleton {
OrderRepositoryImpl(
instance(),
instance(),
instance(),
instance()
)
}
//ViewModelFactory
bind() from provider { OrderViewModelFactory(instance()) }
ViewModelFactory:
class OrderViewModelFactory(private val orderRepository: OrderRepository) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return OrderViewModel(
orderRepository
) as T
}
}