I'm using the well-known Dagger-ViewModelFactory pattern to be able to inject a factory for all the `ViewModel` in all the activities.

```
@ActivityScope
class ViewModelFactory @Inject constructor(
    private val creators: MutableMap<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>
) : ViewModelProvider.Factory {

    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        val creator = creators[modelClass] ?: creators.entries.firstOrNull {
            modelClass.isAssignableFrom(it.key)
        }?.value ?: throw IllegalArgumentException("unknown model class $modelClass")
        return creator.get() as T
    }
}

```

The problem I have is that when I inject the factory into an `Activity` Dagger fails because the providers of the objects for the `ViewModels` that I'm not going to use are not always accessible. They are not because the modules that contain the providers have not been added.

For example, I have a *LogIn* activity and a *SignUp* activity, and this is the way I add the subcomponents for them:

```
    @ContributesAndroidInjector(modules = [
        ViewModelModule::class,
        FirebaseModule::class,
        LogInModule::class,
        BindLogInModule::class
    ])
    @ActivityScope
    internal abstract fun loginActivityInjector(): LoginActivity

    @ContributesAndroidInjector(modules = [
        ViewModelModule::class,
        FirebaseModule::class,
        SignUpModule::class,
        BindSignUpModule::class
    ])
    @ActivityScope
    internal abstract fun signUpActivityInjector(): SignUpActivity

```

Please notice that when I create the subcomponent for `SignUpActivity` I do not add the Module `LogInModule` because I do not need the bindings in that Module.
The result is that I get the error

> 
> e: com.package.my.AppComponent.java:8: error: [Dagger/MissingBinding] com.package.my.login.domain.LogInAuthenticator cannot be provided without an @Provides-annotated method.
>  public abstract interface AppComponent extends dagger.android.AndroidInjector {
>  ^
>  A binding with matching key exists in component: com.package.my.di.ActivityInjectorsModule\_LoginActivityInjector$app\_prodDebug.LoginActivitySubcomponent
>  com.package.my.login.domain.LogInAuthenticator is injected at
>  com.package.my.login.repository.LoginRepository(logInAuthenticator)
>  com.package.my.login.repository.LoginRepository is injected at
>  com.package.my.login.domain.LoginUseCase(loginRepository)
>  com.package.my.login.domain.LoginUseCase is injected at
>  com.package.my.login.presentation.LoginViewModel(loginUseCase)
>  com.package.my.login.presentation.LoginViewModel is injected at
>  com.package.my.di.ViewModelModule.provideLoginViewModel(viewModel)
>  java.util.Map,javax.inject.Provider> is injected at
>  com.package.my.di.ViewModelFactory(creators)
>  com.package.my.di.ViewModelFactory is injected at
>  com.package.my.di.ViewModelModule.bindViewModelFactory$app\_prodDebug(factory)
>  androidx.lifecycle.ViewModelProvider.Factory is injected at
>  com.package.my.login.ui.SignUpActivity.viewModelFactory
>  com.package.my.login.ui.SignUpActivity is injected at
>  dagger.android.AndroidInjector.inject(T) [com.package.my.di.AppComponent → com.package.my.di.ActivityInjectorsModule\_SignUpActivityInjector$app\_prodDebug.SignUpActivitySubcomponent]
> 
> 
> 

This happens because `LogInAuthenticator` is provided by `LogInModule`.

Does this mean that the only solution is to add `LogInModule` even if I don't really need to create `GoogleSignInClient` in the `SignUpActivity`?