I'm using dagger:1.2.2. There're two modules. BaseModule serves an EventBus for an Activity and ActivityModule serves NavigationController for the same Activity.
@Module(injects = { `does NOT have MainActivity.class registered`},
library = true
)
public class BaseModule {
@Provides @Singleton public EventBus provideEventBus() {
return DefaultEventBus.create();
}
@Provides @Singleton public Application provideApplication() {
return mApp;
}
@Provides @IsTablet public boolean isTablet(Application app) {
return app.getResources().getBoolean(R.bool.is_tablet);
}
}
@Module(
addsTo = BaseModule.class,
injects = MainActivity.class
)
public class ActivityModule {
@Provides
NavigationController provideNavigationController(Application app,@IsTablet boolean isTablet) {
return new NavigationController(app, isTablet);
}
}
Activity's fields:
@Inject
EventBus mEventBus;
@Inject
NavigationController mNavigationController;
NavigationController's ugly ctor:
public NavigationController(Context context, FragmentManager fm, List<Behaviour> behaviourList, @Nullable Class lastRoot,
@IsTablet boolean isTablet, Application application) {
This code passes static validation and performs well with
protected void onCreate(Bundle savedInstanceState) {
ObjectGraph activityGraph = getBaseModuleGraph(this).plus(new ActivityModule(this));
activityGraph.inject(this);
}
It crushes as expected due to unsatisfied dependency provided by ActivityModule if i just apply:
getBaseModuleGraph(this).inject(this);
The thing that bugs me is that BaseModule's inject doesn't contain MainActivity while it provides EventBus dependency for it. If I add this inject it gonna complain about unresolved NavigationController that is provided by ActivityModule. Setting complete=false on the BaseModule results in runtime exception
NavigationController has no injectable members. Do you want to add an injectable constructor? required by class MainActivity
I don't quite get it.
Ultimately I wanted BaseModule's injects to be more explicit by including MainActivity because it provides EventBus as I mentioned.
Could you help me out understanding it?