我有多个扩展BaseActivity的活动。每个活动都有自己的组件和模块。这些组件扩展了具有自己的BaseActivityModule的BaseActivityComponent。
现在,我有两个活动,希望能够注入其他活动无法执行的对象。
我怎样才能做到这一点?
我尝试仅为这两个活动创建基本组件和基本模块,但这给了我错误:
MyModule依赖于非分层顺序中的作用域组件
现在,我希望两个活动共享AdvertAdvanced。
该组件由两个活动之一使用:
@ActivityScope
@Component(
dependencies = ApplicationComponent.class,
modules = {
BaseActivityModule.class,
MainActivityModule.class
}
)
public interface MainActivityComponent extends BaseActivityComponent {
void inject(MainActivity mainActivity);
MainActivityPresenter mainPresenter();
AdvertAdvanced advertAdvanced();
}
作为每个活动的基本组件,我有以下内容:
@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();
}
这是活动模块的样子:
@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
)
基本活动范围(@BaseScope
)
广告活动范围(@AdvertScope
)
主要活动范围(@ConcreteScope
)
而且您的组件应该彼此延伸,并依赖于它们的超组件。
关于java - 使用Dagger 2.0仅在两个 Activity 之间共享对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34239999/