I really need help with solving the following error:
error: [Dagger/MissingBinding] prj.view.fragment.FragmentA cannot be provided without an @Inject constructor or an @Provides-annotated method. This type supports members injection but cannot be implicitly provided.
A binding with matching key exists in component: prj.di.module.FragmentsModule_ContributeFragmentA.FragmentASubcomponent
prj.view.fragment.FragmentA is injected at
prj.view.activity.MainActivity.fragmentA
prj.view.activity.MainActivity is injected at
dagger.android.AndroidInjector.inject(T) [prj.di.component.ApplicationComponent → prj.di.module.ActivitiesModule_ContributeMainActivity.MainActivitySubcomponent]
I tried this approach but for some reason, this does not work for me, and here are my classes:
@ApplicationScope
@Component(modules = {ApplicationContextModule.class, RetrofitModule.class, ActivitiesModule.class, AndroidSupportInjectionModule.class})
public interface ApplicationComponent extends AndroidInjector<MyApplication> {
@Component.Factory
interface Factory extends AndroidInjector.Factory<MyApplication> {}
}
@Module
public abstract class ApplicationContextModule {
@Binds
@ApplicationScope
@ApplicationContext
abstract Context bindsContext(MyApplication context);
}
@Module
public abstract class ActivitiesModule {
@ActivityScope
@ContributesAndroidInjector(modules = {MainActivityContextModule.class, FragmentsModule.class})
abstract MainActivity contributeMainActivity();
}
@Module
public class MainActivityContextModule {
@Provides
@ActivityScope
@ActivityContext
Context provideContext(MainActivity context){
return context;
}
}
@Module
public abstract class FragmentsModule {
@FragmentScope
@ContributesAndroidInjector()
abstract FragmentA contributeFragmentA();
}
// BaseActivity extends DaggerAppCompatActivity
public class MainActivity extends BaseActivity {
@Inject FragmentA fragmentA;
@Inject
@ApplicationContext
public Context applicationContext;
@Inject
@ActivityContext
public Context activityContext;
...
public class FragmentA extends DaggerFragment {
@Inject
DispatchingAndroidInjector<Fragment> childFragmentInjector;
@Inject
@ActivityContext
Context activityContext;
...
So as you can see I implemented a similar logic as proposed in the link provided above, but for some reason that is not working. Please, help me to understand what's wrong...