gpt4 book ai didi

java - 使用 Dagger 2.0 仅在两个 Activity 之间共享对象

转载 作者:行者123 更新时间:2023-11-30 10:52:53 25 4
gpt4 key购买 nike

我有多个扩展 BaseActivity 的 Activity 。每个 Activity 都有自己的组件和模块。这些组件扩展了具有自己的 BaseActivityModuleBaseActivityComponent。现在我有两个 Activity ,我希望它们能够注入(inject)其他 Activity 无法注入(inject)的对象。

我该怎么做?

我尝试为这两个 Activity 创建一个基本组件和基本模块,但这给了我错误:

MyModule depends on a scoped components in a non-hierarchical order

现在我希望 AdvertAdvanced 由两个 Activity 共享。

此组件由以下两个 Activity 之一使用:

@ActivityScope
@Component(
dependencies = ApplicationComponent.class,
modules = {
BaseActivityModule.class,
MainActivityModule.class
}
)
public interface MainActivityComponent extends BaseActivityComponent {
void inject(MainActivity mainActivity);
MainActivityPresenter mainPresenter();
AdvertAdvanced advertAdvanced();
}

作为每个 Activity 的基本组件,我有以下内容:

    @ActivityScope
@Component(dependencies = ApplicationComponent.class, modules = BaseActivityModule.class)
public interface BaseActivityComponent extends ApplicationComponent {

BaseActivity baseActivity();
Navigator navigator();
KeyboardAction keyboardAction();

}

应用组件:

    @Singleton
@Component(
modules = {
ApplicationModule.class
}
)
public interface ApplicationComponent {

void inject(BaseActivity activity);

Context context();
ApiService apiService();
Picasso picasso();

}

这是 Activity 模块的样子:

@Module
public class MainActivityModule {

private AdvertAdvanced advertAdvanced;

public MainActivityModule() {
advertAdvanced = new AdvertAdvanced();
}

@Provides
@ActivityScope
MainActivityPresenter provideActivityPresenter(****) {
return ****;
}

@Provides
@ActivityScope
AdvertAdvanced advertAdvanced() {
return advertAdvanced;
}

}

最佳答案

您将需要定义一个新组件 AdvertActivityComponent,它具有 BaseActivityComponent 的组件依赖性,以及一个子范围,例如 @AdvertisedScope。您当前的 BaseActivityComponent 应该有自己的范围,例如 @BaseScope,并且您的 MainActivityComponent 应该依赖于 AdvertActivityComponent一个 @ConcreteActivityScope

本质上,您的范围层次结构是:

  • 应用范围(@Singleton)
  • 基本 Activity 范围(@BaseScope)
  • 广告 Activity 范围(@AdvertScope)
  • 主要 Activity 范围(@ConcreteScope)

并且您的组件应该相互扩展并依赖于它们的 super 组件。

关于java - 使用 Dagger 2.0 仅在两个 Activity 之间共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34239999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com