Created
April 5, 2024 19:50
-
-
Save Kvest/f2acfef603f85bfe89105a001aef16f8 to your computer and use it in GitHub Desktop.
ViewModel AssistedInject example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class SomeDetailsViewModel @AssistedInject constructor( | |
@Assisted private val code: String, | |
@Assisted private val type: SomeType, | |
private val someRepository: SomeRepository, | |
) : ViewModel() { | |
@AssistedFactory | |
interface SomeDetailsViewModelAssistedFactory { | |
fun create(code: String, type: SomeType): SomeDetailsViewModel | |
} | |
} | |
@Inject | |
lateinit var someDetailsViewModelAssistedFactory: SomeDetailsViewModel.SomeDetailsViewModelAssistedFactory | |
private val someDetailsViewModelFactory = createViewModelFactory { | |
someDetailsViewModelAssistedFactory.create(code, type) | |
} | |
private val viewModel: SomeDetailsViewModel by lazy(LazyThreadSafetyMode.NONE) { | |
getViewModel(someDetailsViewModelFactory) | |
} | |
inline fun <T : ViewModel> createViewModelFactory(crossinline creator: () -> T): ViewModelProvider.Factory { | |
return object : ViewModelProvider.Factory { | |
@Suppress("UNCHECKED_CAST") | |
override fun <T : ViewModel> create(modelClass: Class<T>): T { | |
return creator() as T | |
} | |
} | |
} | |
inline fun <reified T : ViewModel> Fragment.getViewModel(factory: ViewModelProvider.Factory): T { | |
return ViewModelProvider(this, factory)[T::class.java] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment