匕首注入,完全混乱

时间:2015-04-14 07:48:58

标签: android dagger

我正在使用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}},正如我所提到的。

你能帮助我理解吗?

0 个答案:

没有答案