【问题标题】:Dagger activity graph and separated modulesDagger 活动图和分离的模块
【发布时间】:2013-06-04 03:42:20
【问题描述】:

我有一个 Android 应用程序,我正在尝试使用 dagger。我决定使用全局图 + 活动图。我有三个模块:

Android 模块

@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 上使用包含ActivityModule,没有它,应用程序崩溃,说它可以在Context 上找到构造函数并且无法注入ActivityContext

图表配置正确吗?我将模块添加到ApplicationBaseActivity 中的图表中,我认为这已经足够了,我不需要包含,但我不确定我是否完全理解这个配置过程。

编辑

像这样,dagger 不会出错,但如果我尝试注入 Activity Context,在运行时它是 null

【问题讨论】:

    标签: android dependency-injection android-volley dagger


    【解决方案1】:

    如果有人感兴趣,解决方案是删除

    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 的东西。此外,如果您正在为您的活动模块执行include,我很确定图表的一部分是在您想要的之前构建的,也就是仅当活动处于活动状态时。
    • 所以检查它作为答案
    • 嘿@alex,你能在这里说明一下你是如何在 Application 和 Activity 类中创建图表的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多