I'm using Dagger Android to link dependencies in my Android application. I have 2 Activities, both have their own Scope (@ActivityScoped). Here is my code so far :
MyApplication.java
public class MyApplication extends Application implements HasActivityInjector {
@Inject DispatchingAndroidInjector<Activity> activityDispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
DaggerAppComponent.builder()
.application(this)
.build()
.inject(this);
}
@Override
public AndroidInjector<Activity> activityInjector() {
return activityDispatchingAndroidInjector;
}
}
AppComponent.java
@Singleton
@Component(modules = {
AndroidInjectionModule.class,
AppModule.class,
ActivityBindingModule.class
})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application app);
AppComponent build();
}
void inject(MyApplication app);
}
ActivityBindingsModule.java
@Module(subcomponents = ActivityComponent.class)
public abstract class ActivityBindingModule {
@ActivityScoped
@ContributesAndroidInjector
public abstract MainActivity contributeMainActivityInjector();
@ActivityScoped
@ContributesAndroidInjector
public abstract SecondActivity contributeSecondActivityInjector();
}
Let's say I have a class MyClass tied to ActivityScoped that I want to inject into both Activities :
MyClass.java
@ActivityScoped
public class MyClass {
@Inject
public MyClass(Activity activity) {
// Do something with the activity instance...
}
}
What I want to achieve is to inject into MyClass the Activity instance of the enclosing scope.
For example, if MyClass is injected into ActivityA, then the activity constructor argument of MyClass should be an instance of ActivityA.
What I tried :
- @Binds annotated method to inject
ActivityAandActivityBasActivity. This doesn't work since Dagger does not allow binding multiple implementations to the same base type. - Map Multibindings doesn't suit my needs : I don't want MyClass to know about the Activity in which it is injected.
Maybe I'm missing something, as dependency injection is rather hard to setup. How can I do that with Dagger Android ?