Dagger2注入到Presenter类MVP

时间:2020-04-26 22:54:49

标签: java android

我很久以前就遵循MVP模式,并且当我升级我的旧应用程序以使用Dagger 2和MVVM时,我现在处于泡菜状态,其中MVVM针对此新的注入模式进行了优化。应用程序的注入行为不良。

在尝试全面改进之前,我试图同时保留一些在presenter层中的遗留代码。不幸的是,在这些presenter类中,我@Injecting个对象@Singleton中很多。

例如:

public class MyPresenter {
     @Inject
     MyApp mApplication; //Application Class

     @Inject
     RestClient mRestClient;

     public MyPresenter() {
          MyApp.getAppComponent(MyApp.app()).inject(this);
     }
}

这有效。我可以通过这种方式访问​​对象,但是我正在远离它,但是我试图使其正常工作。我创建了一个新的AppComponent类,该类适用于我的所有MVVM更改,但是由于有将近100个演示者类,因此我需要一些帮助来弄清楚如何使其同时存在。

这是我的新AppComponent

@Component(
        modules = [
            AndroidInjectionModule::class,
            AppModule::class,
            ActivityBuilder::class,
            ViewModelModule::class])
interface IAppComponent {
    @Component.Builder
    interface Builder {
        fun build(): IAppComponent

        @BindsInstance
        fun application(application: Application): Builder
    }

    fun inject(myApp: MyApp)
}

这是我的旧AppComponent,使上面的演示者注入能够正常工作:

@Singleton
@Component(modules = {AndroidInjectionModule.class, AppModule.class, ActivityBuilder.class})
public interface AppComponent {
    void inject(MyApp app);

    void inject(BaseActivity activity);

    void inject(MyService1 service);

    void inject(MyService2 service);

    void inject(APIService api);

    void inject(Fragment1 fragment);

    void inject(Fragment2 fragment);

    void inject(Fragment3 fragment);

    void inject(Fragment4 fragment);

    void inject(Fragment5 fragment);

    void inject(UserUpdateService service);

    void inject(MyActivity activity);

    void inject(MySecondActivity activity);

    void inject(MyThirdActivity activity);

    void inject(MyPresenter myPresenter);

    void inject(MySecondPresenter mySecondPresenter);

    void inject(MyThirdPresenter myThirdPresenter);
}

如您所见,我必须创建一个路径,以能够注入将依赖项注入所需的每种类型的类。

不幸的是,对于这种情况,我无法成功地使它们并存。我可以同时进行两种操作吗?

0 个答案:

没有答案
相关问题