Last active
April 23, 2018 20:02
-
-
Save guitcastro/a88f206ef37a124d280ad9bccbe03446 to your computer and use it in GitHub Desktop.
KodeIn ViewModelModules
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
val kodeIn = Kodein.lazy { | |
import(viewModelProvidersModule(vmModules)) | |
} | |
val vmModules = Kodein.Module { | |
bind<FooViewModel>() with provider { FooViewModel(instance()) } | |
} |
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
import android.arch.lifecycle.ViewModel | |
import android.arch.lifecycle.ViewModelProvider | |
import android.arch.lifecycle.ViewModelProviders | |
import android.support.v7.app.AppCompatActivity | |
import org.kodein.di.Kodein | |
import org.kodein.di.TT | |
import org.kodein.di.bindings.subTypes | |
import org.kodein.di.direct | |
import org.kodein.di.generic.* | |
import org.kodein.di.jvmType | |
fun viewModelProvidersModule(viewModelModule: Kodein) = Kodein.Module { | |
bind<ViewModelProvider>() with contexted<AppCompatActivity>().provider { | |
ViewModelProviders.of(context, KodeinViewModelProviderFactory(viewModelModule)) | |
} | |
bind<ViewModel>().subTypes() with { type -> | |
@Suppress("UNCHECKED_CAST") | |
provider { | |
instance<ViewModelProvider>().get(type.jvmType as Class<ViewModel>) | |
} | |
} | |
} | |
class KodeinViewModelProviderFactory(private val kodein: Kodein) : ViewModelProvider.Factory { | |
override fun <T : ViewModel?> create(modelClass: Class<T>): T { | |
val vm = kodein.direct.Instance(TT(modelClass as Class<*>)) | |
return modelClass.cast(vm) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment