我正在使用dagger:1.2.2
。有两个模块。 BaseModule为Activity
提供EventBus,而ActivityModule为同一Activity
提供NavigationController。
@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
的字段:
@Inject
EventBus mEventBus;
@Inject
NavigationController mNavigationController;
NavigationController的丑陋ctor:
public NavigationController(Context context, FragmentManager fm, List<Behaviour> behaviourList, @Nullable Class lastRoot,
@IsTablet boolean isTablet, Application application) {
此代码通过静态验证,并且
表现良好protected void onCreate(Bundle savedInstanceState) {
ObjectGraph activityGraph = getBaseModuleGraph(this).plus(new ActivityModule(this));
activityGraph.inject(this);
}
如果我只是申请,由于ActivityModule
提供的不满意依赖性,它会按预期粉碎:
getBaseModuleGraph(this).inject(this);
让我感到困惑的是BaseModule
的注入不包含MainActivity
,而它为EventBus
提供BaseModule
依赖。如果我添加这个注入它会抱怨ActivityModule提供的未解析的NavigationController。在BaseModule
上设置complete = false会导致运行时异常
NavigationController没有可注入的成员。你想添加一个 注射构造函数?上课所要求的 MainActivity
我不太明白。
最后,我希望MainActivity
的注入更加明确,包括EventBus
,因为它提供{{1}},正如我所提到的。
你能帮助我理解吗?