Обеспечение зависимости Kotlin-Inject с помощью параметра SavedStateHandleAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Обеспечение зависимости Kotlin-Inject с помощью параметра SavedStateHandle

Сообщение Anonymous »

Мне нужно использовать библиотеку внедрения зависимостей Kotlin-Inject, которая в настоящее время работает с Android, но в будущем планируется создать многоплатформенное приложение (iOS + Android).
У меня есть интерфейс FlowController:

Код: Выделить всё

interface FlowController {
enum class Type { SINGLE, MULTIPLE, OTHER }
}
Тогда у меня есть три реализации этого FlowController: Мой фрагмент включает определенный параметр в SavedStateHandle, чтобы DI мог решить, какой FlowController необходимо ввести в этот момент.

Код: Выделить всё

@ViewModelScoped
@Component
abstract class ViewModelComponent(@Component val parent: ApplicationComponent) {
@Provides
fun providesFlowController(
@Assisted savedStateHandle: SavedStateHandle,
controllers: Set
): FlowController = controllers.first {
it.flowType == checkNotNull(savedStateHandle[Keys.FLOW_TYPE])
}

@ViewModelScoped
@IntoSet
@Provides
fun SingleFlowControllerImpl.bindIntoSet(): FlowController = this

[rest of the bindings]

}
Фрагмент:

Код: Выделить всё

@Inject
class MyFragment(
createViewModel: (SavedInstanceState) -> MyViewModel,
) : BaseFragment(R.layout.fragment_my) { {
private val viewModel by viewModel(createViewModel)
}

/**
* [viewModels] helper that allows you to pass a single factory function using a [SavedStateHandle].
*/
inline fun  Fragment.viewModel(crossinline factory: (SavedStateHandle) -> VM): Lazy =
viewModels {
viewModelFactory { addInitializer(VM::class) { factory(createSavedStateHandle()) } }
}

Модель просмотра:

Код: Выделить всё

@Inject
class MyViewModel(
private val flowController: FlowController,
@Assisted private val savedInstanceState: SavedInstanceState,
) { }
Теперь мне нужно внедрить FlowController, предоставленный ViewModelComponent, во ViewModel Fragment, но он не может разрешить граф зависимостей, поскольку он не знает, как предоставить SavedInstanceState FlowController

Подробнее здесь: https://stackoverflow.com/questions/792 ... -parameter
Ответить

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

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

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

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

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