From 87fd17084e62f98d1bec42491376f90aa7005832 Mon Sep 17 00:00:00 2001 From: Denis Karmyshakov Date: Thu, 15 Mar 2018 18:35:44 +0300 Subject: [PATCH] Added default ViewModelFactory for DI --- build.gradle | 1 + .../templates/viewmodel/ViewModelFactory.kt | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/main/java/ru/touchin/templates/viewmodel/ViewModelFactory.kt diff --git a/build.gradle b/build.gradle index ce11cf4..896593f 100644 --- a/build.gradle +++ b/build.gradle @@ -16,6 +16,7 @@ android { dependencies { api project(path: ':libraries:components') + api 'javax.inject:javax.inject:1' api 'net.danlew:android.joda:2.9.9' api 'com.android.support:multidex:1.0.3' diff --git a/src/main/java/ru/touchin/templates/viewmodel/ViewModelFactory.kt b/src/main/java/ru/touchin/templates/viewmodel/ViewModelFactory.kt new file mode 100644 index 0000000..9bf024b --- /dev/null +++ b/src/main/java/ru/touchin/templates/viewmodel/ViewModelFactory.kt @@ -0,0 +1,19 @@ +package ru.touchin.templates.viewmodel + +import android.arch.lifecycle.ViewModel +import android.arch.lifecycle.ViewModelProvider + +import javax.inject.Inject +import javax.inject.Provider +import javax.inject.Singleton + +@Singleton +class ViewModelFactory @Inject constructor( + private val creators: Map, @JvmSuppressWildcards Provider> +) : ViewModelProvider.Factory { + + @Suppress("UNCHECKED_CAST") + override fun create(modelClass: Class): T + = (creators[modelClass]?.get() as? T) ?: throw IllegalArgumentException("Unknown model class $modelClass") + +}