我有多个扩展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/

10-09 20:34