0

How can one go about injecting HiltViewModelFactory into non-Android components like Conductor's Controller.. etc. Currently I have this code but it doesn't work, saying HiltViewModelFactory cannot be provided.

@EntryPoint
  @InstallIn(ActivityComponent::class)
  interface MyClassInterface {
    fun viewModelFactory(): HiltViewModelFactory
  }

  private val viewModelStore = ViewModelStore()

  private val viewModelFactory by lazy {
    EntryPoints.get(requireContext(), MyClassInterface::class.java).viewModelFactory()
  }
Vincent Paing
  • 2,308
  • 3
  • 17
  • 29

1 Answers1

0

You could probably do this:

@Module
@InstallIn(ActivityComponent::class)
class HiltViewModelModule {
    @Provides fun viewModelFactory(activity: Activity): HiltViewModelProviderFactory = 
        (activity as AppCompatActivity).getDefaultViewModelProviderFactory() as HiltViewModelFactory
}

This should work correctly in any Activity that is annotated with @AndroidEntryPoint.

EpicPandaForce
  • 79,669
  • 27
  • 256
  • 428