J'ai copié un exemple de MVVM avec les composants d'architecture Android, Retrofit, Dagger et la liaison de données. J'utilise ce code comme point de départ pour mon application afin de commencer à utiliser de meilleures architectures dans le développement d'applications Android. Cependant, prenez ces codes :
interface ViewModelInjector {
/**
* Injects required dependencies into the specified PostListViewModel.
* @param postListViewModel PostListViewModel in which to inject the dependencies
*/
fun inject(postListViewModel: PostListViewModel)
@Component.Builder
interface Builder {
fun build(): ViewModelInjector
fun networkModule(networkModule: NetworkModule): Builder
}
}
Et
class ViewModelFactory(private val activity: AppCompatActivity) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(PostListViewModel::class.java)) {
val db = Room.databaseBuilder(
activity.applicationContext,
AppDatabase::class.java,
"posts"
).build()
@Suppress("UNCHECKED_CAST")
return PostListViewModel(db.postDao()) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
Et
abstract class BaseViewModel : ViewModel() {
private val injector: ViewModelInjector = DaggerViewModelInjector
.builder()
.networkModule(NetworkModule)
.build()
init {
inject()
}
private fun inject() {
when (this) {
is PostListViewModel -> injector.inject(this)
}
}
}
Le principal problème est qu'il est bloqué avec PostListViewModel
. J'aimerais le faire d'une manière dynamique, en acceptant tout type de [Name]ViewModel
classe. J'ai essayé quelques méthodes en utilisant Class<T>
mais je n'ai plus le code. J'ai également essayé de faire une recherche, mais je n'ai pas trouvé de résultat satisfaisant. Peut-être que je n'ai pas cherché les bons termes. Je vous remercie de votre aide.