我有多项活动扩展 BaseActivity 。每个活动都有自己的组件和模块。这些组件扩展了 BaseActivityComponent ,它具有自己的 BaseActivityModule 。 现在我有两个活动,我希望能够注入其他活动无法实现的对象。
我该怎么做?
我尝试为这两个活动创建一个基本组件和基本模块,但这给了我错误:
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;
}
}
答案 0 :(得分:1)
您需要定义一个新组件AdvertActivityComponent
,其组件依赖关系为BaseActivityComponent
,并使用@AdvertisedScope
等子范围。您当前的BaseActivityComponent
应该有自己的范围,例如@BaseScope
,而您的MainActivityComponent
应该依赖于AdvertActivityComponent
@ConcreteActivityScope
。
基本上,您的范围层次结构是:
@Singleton
)@BaseScope
)@AdvertScope
)@ConcreteScope
)你的组件应该相互扩展并依赖于它们的超级组件。