Advertisement
akhbulatov

ViewModel Dagger Multi-module (not work)

Jul 3rd, 2020
1,478
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.37 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],
  9.     dependencies = [ProvidersFacade::class, ViewModelsProvider::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.                 .viewModelsProvider(CoreProvidersFactory.createViewModelBuilder())
  18.                 .providersFacade(providersFacade)
  19.                 .build()
  20.         }
  21.     }
  22. }
  23.  
  24. // in core_api
  25. interface ViewModelsProvider {
  26.     fun provideViewModelFactory(): ViewModelProvider.Factory
  27. }
  28.  
  29. // in core
  30. object CoreProvidersFactory {
  31.  
  32.     fun createViewModelBuilder(): ViewModelsProvider {
  33.         return DaggerViewModelComponent.create()
  34.     }
  35. }
  36.  
  37. // in core_impl
  38. @Module
  39. abstract class ViewModelModule {
  40.     @Binds
  41.     abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
  42. }
  43.  
  44. class ViewModelFactory @Inject constructor(
  45.     private val vmProvider: Provider<ViewModel>
  46. ) : ViewModelProvider.Factory {
  47.  
  48.     @Suppress("UNCHECKED_CAST")
  49.     override fun <T : ViewModel?> create(modelClass: Class<T>): T {
  50.         return vmProvider.get() as T
  51.     }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement