Guilherme Delgado
1 min readNov 25, 2019

--

Hello Abir, can you provide a sample?

I’m facing a problem where I have an Activity with 2 ViewModels and I’m getting

cannot be provided without an @Inject constructor or an @Provides-annotated method.

for the second. I was doing something like this:

BaseActivityModule:

@Module
abstract class BaseActivityModule<A : AppCompatActivity> {
@Binds
abstract fun provideActivity(activity : A): AppCompatActivity

@Binds
internal abstract fun bindSavedStateRegistryOwner(activity : A): SavedStateRegistryOwner

@Module
companion object {
@Provides
@ActivityContext
fun provideContext(activity: AppCompatActivity): Context = activity
}
}

SampleActivityModule:

@Module
abstract class SampleActivityModule : BaseActivityModule<SampleActivity>() {

@Binds
@IntoMap
@ViewModelKey(SampleActivityViewModelA::class)
abstract fun bindFactory(factory: SampleActivityViewModelA.Factory): ViewModelAssistedFactory<out ViewModel>

@Binds
@IntoMap
@ViewModelKey(SampleActivityB::class)
abstract fun bindFactory2(factory: SampleActivityBViewModel.Factory): ViewModelAssistedFactory<out ViewModel>

@Module
companion object{
@JvmStatic
@Nullable
@Provides
fun provideDefaultArgs(): Bundle? {
return null
}
}
}

And the ViewModels:

A:

class SampleActivityViewModelA @AssistedInject constructor(
@Assisted stateHandle: SavedStateHandle, ...) : BaseViewModel(stateHandle, ...) {

@AssistedInject.Factory
interface Factory : ViewModelAssistedFactory<SampleActivityViewModelA>

B:

class SampleActivityViewModelB @AssistedInject constructor(
@Assisted stateHandle: SavedStateHandle, ...) : BaseViewModel(stateHandle, ...) {

@AssistedInject.Factory
interface Factory : ViewModelAssistedFactory<SampleActivityViewModelB>

But it fails :/

EDIT: so it turns out I was doing things right, just one piece off the puzzle missing. Check it here.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Guilherme Delgado
Guilherme Delgado

Written by Guilherme Delgado

Software Engineer at BlissApplications 🇵🇹 • github.com/GuilhE • When I’m not coding I’m 🧗🏽or 🏄‍♂️

Responses (2)

Write a response