Dagger 2 и AssistedFactory: как сделать одну фабрику, с помощью которой создавать разные вьюМодели с SavedStateHandle?

я запутался в Dagger2 и AssistedFactory.

У меня есть несколько вьюМоделей, в которых есть SavedStateHandle. Чтобы заинжектить такую вьюМодель с помощью Dagger2, требуется Assisted Factory. Я создаю отдельную фабрику для каждой вьюмодели, потому что в их конструкторах есть разные зависимости (разные UseCases, Storages итд.) Я бы хотел иметь одну фабрику, с помощью которой создавал бы все эти вьюМодели, как это делается с обычной фабрикой (не Assisted). Но как ее сделать общую, с учетом того что там разные зависимости, и как с ее помощью создавать правильно вьюМодели? Буду благодарен за помощь

Пример одной такой вьюМодели и ее фабрики:

    class CharactersViewModelFactory @AssistedInject constructor(
        private val getCharactersUseCase: GetCharactersUseCase,
        private val storageImpl: SharedPrefStorageImpl,
        @Assisted owner: SavedStateRegistryOwner,
    ) : AbstractSavedStateViewModelFactory(owner, null) {
        override fun <T : ViewModel?> create(
            key: String,
            modelClass: Class<T>,
            handle: SavedStateHandle
        ): T = CharactersViewModel(getCharactersUseCase, storageImpl, handle) as T
    }

    @AssistedFactory
    interface CharactersViewModelAssistedFactory {
        fun create(owner: SavedStateRegistryOwner): CharactersViewModelFactory
    }

    class CharactersViewModel @Inject constructor(
        private val getCharactersUseCase: GetCharactersUseCase,
        private val storage: SharedPrefStorage,
        private val handle: SavedStateHandle
    ) : ViewModel() {

Как она запускается во фрагменте:

    @Inject
    lateinit var assistedFactory: CharactersViewModelAssistedFactory
    private val viewModel: CharactersViewModel by viewModels { assistedFactory.create(this) }

Ответы (0 шт):