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) }