Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Module
- abstract class UsersModule {
- @Binds
- abstract fun bindUsersViewModel(viewModel: UsersViewModel): ViewModel
- }
- @Component(
- modules = [UsersModule::class],
- dependencies = [ProvidersFacade::class, ViewModelsProvider::class]
- )
- interface UsersComponent : ViewModelsProvider {
- fun inject(fragment: UsersFragment)
- companion object {
- fun create(providersFacade: ProvidersFacade): UsersComponent {
- return DaggerUsersComponent.builder()
- .viewModelsProvider(CoreProvidersFactory.createViewModelBuilder())
- .providersFacade(providersFacade)
- .build()
- }
- }
- }
- // in core_api
- interface ViewModelsProvider {
- fun provideViewModelFactory(): ViewModelProvider.Factory
- }
- // in core
- object CoreProvidersFactory {
- fun createViewModelBuilder(): ViewModelsProvider {
- return DaggerViewModelComponent.create()
- }
- }
- // in core_impl
- @Module
- abstract class ViewModelModule {
- @Binds
- abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
- }
- class ViewModelFactory @Inject constructor(
- private val vmProvider: Provider<ViewModel>
- ) : ViewModelProvider.Factory {
- @Suppress("UNCHECKED_CAST")
- override fun <T : ViewModel?> create(modelClass: Class<T>): T {
- return vmProvider.get() as T
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement