Advertisement
akhbulatov

ViewModel Dagger Multi-module

Jul 3rd, 2020
1,431
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.03 KB | None | 0 0
  1. @Module
  2. abstract class UsersModule {
  3.     @Binds
  4.     abstract fun bindUsersViewModel(viewModel: UsersViewModel): ViewModel
  5. }
  6.  
  7. @Component(
  8.     modules = [UsersModule::class, ViewModelModule::class],
  9.     dependencies = [ProvidersFacade::class]
  10. )
  11. interface UsersComponent : ViewModelsProvider {
  12.     fun inject(fragment: UsersFragment)
  13.  
  14.     companion object {
  15.         fun create(providersFacade: ProvidersFacade): UsersComponent {
  16.             return DaggerUsersComponent.builder()
  17.                 .providersFacade(providersFacade)
  18.                 .build()
  19.         }
  20.     }
  21. }
  22.  
  23. // в core_api
  24. @Module
  25. abstract class ViewModelModule {
  26.     @Binds
  27.     abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
  28. }
  29.  
  30. // в core_api
  31. class ViewModelFactory @Inject constructor(
  32.     private val vmProvider: Provider<ViewModel>
  33. ) : ViewModelProvider.Factory {
  34.  
  35.     @Suppress("UNCHECKED_CAST")
  36.     override fun <T : ViewModel?> create(modelClass: Class<T>): T {
  37.         return vmProvider.get() as T
  38.     }
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement