Dagger活动图和分离模块

5
我有一个 Android 应用程序,正在尝试使用 dagger。我决定使用全局图形 + 活动图形。我有三个模块:
AndroidModule
@Module(library = true)
public class AndroidModule {

  private final MApplication mApplication;

  public AndroidModule(MyApplication application) {
    mApplication = application;
  }

  @Provides @Singleton @ForApplication Context provideApplicationContext() {
    return mApplication;
  }
}

MyAppModules

@Module(
    injects = {
            MainActivity.class,
            AddFragment.class,
            AddMapFragment.class,
            MyActivity.class,
            ListFragment.class,
            MyMapFragment.class,
            RetainFragment.class,
            SingleActivity.class,
            UserActivity.class,
            UserLoginFragment.class,
            UserProfileActivity.class,
            UserProfileFragment.class,
            UserRegisterFragment.class,
            WelcomeFragment.class
    },
    complete = false,
    library = true,
    includes = ActivityModule.class
)
public class MyAppModule {

  private final Bus mBus = new Bus();

  @Provides @Singleton Bus provideBus() {
    return mBus;
  }

  @Provides @Singleton
  RequestQueue provideRequestQueue(@ForApplication Context context) {
    return Volley.newRequestQueue(context);
  }

  @Provides @Singleton Api provideApi(RequestQueue queue) {
    return new AppApi(queue);
  }

  @Provides Logger provideLogger() {
    return new MyLogger();
  }
}

活动模块
@Module(
    complete = false,
    library = true
)
public class ActivityModule {

  private BaseActivity mActivity;
  public ActivityModule() {}

  public ActivityModule(BaseActivity activity) {
    mActivity = activity;
  }

  @Provides @Singleton @ForActivity Context provideActivityContext() {
    return mActivity;
  }

  @Provides @Singleton LocationClientFactory provideLocationClientFactory() {
    return new LocationClientFactory(mActivity);
  }
}

我不得不在MyAppModule中使用include来引用ActivityModule,否则应用程序会崩溃,提示找不到Context的构造函数,无法注入ActivityContext
图表配置正确吗?我在ApplicationBaseActivity中将模块添加到了图表中,我认为这已经足够了,我不需要include,但我不确定我完全理解此过程的配置。
编辑:
像这样,Dagger没有错误,但如果我尝试注入一个ActivityContext,在运行时它是null
1个回答

4
如果有人感兴趣的话,解决方案是移除

标签。

injects = {
        MainActivity.class,
        AddFragment.class,
        AddMapFragment.class,
        MyActivity.class,
        ListFragment.class,
        MyMapFragment.class,
        RetainFragment.class,
        SingleActivity.class,
        UserActivity.class,
        UserLoginFragment.class,
        UserProfileActivity.class,
        UserProfileFragment.class,
        UserRegisterFragment.class,
        WelcomeFragment.class
}

将来自 MyAppModule 的内容放入 ActivityModule 中。

这是因为(如果您正在使用Activity Graphs示例),您的活动对象图是“addsTo” MyAppModule 的东西。此外,如果您正在包含活动模块,我相信该图的一部分会在您希望它存在时构建,即仅当活动处于活动状态时。 - Christopher Perry
所以将其作为答案进行检查。 - Daniel Gomez Rico
嘿 @alex,你能否在这里详细说明一下你是如何在应用程序和活动类中创建这些图形的? - bogdan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接