All of the following are used with dagger 2.10 and dagger.android .
Let's say I have a class that I would like to introduce in several actions.
public class DemoSharedClass { Activity activity; @Inject public DemoSharedClass(Activity activity) { this.activity = activity; } }
Then, using the latest Dagger APIs, my classes are defined as
public class DemoActivity extends DaggerActivity { @Inject DemoSharedClass demoSharedClass;
Each action has its own module and subcomponent defined as (the same for Demo2Activity )
@Module(subcomponents = DemoActivitySubcomponent.class) public abstract class DemoActivityModule { @Binds @IntoMap @ActivityKey(DemoActivity.class) abstract AndroidInjector.Factory<? extends Activity> bindDemoActivityInjectorFactory(DemoActivitySubcomponent.Builder builder);
Finally, an application component is defined as
@Component(modules = { ApplicationModule.class, AndroidInjectionModule.class, DemoActivityModule.class, Demo2ActivityModule.class, }) interface DemoApplicationComponent { DemoApplication injectApplication(DemoApplication application); }
Now I get this error when creating a project:
Error:(11, 11) error: [dagger.android.AndroidInjector.inject(T)] android.app.Activity is bound multiple times: @Binds android.app.Activity dagger.demo.DemoActivityModule.bindActivity(dagger.demo.DemoActivity) @Binds android.app.Activity dagger.demo.Demo2ActivityModule.bindActivity(dagger.demo.Demo2Activity)
I get an error, and I think that is because they are in the same area as the application component.
I was thinking of creating a common module for both DemoSubcomponents, which would look something like this, but with a similar error.
@Module public abstract class SharedClassModule { @Binds abstract Activity bindContext(DemoActivity demoActivity); @Binds abstract Activity bindContext(Demo2Activity demo2Activity); }
Question: How should I do this?