(匕首2)为MVP中的不同类型提供相同的实例

时间:2018-12-19 13:34:56

标签: android dagger-2 android-mvp

我正在应用程序中遵循MVP模式。我有一个视图,该视图扩展了另一个抽象视图类,实现了另一个接口(比如说A),并且还实现了MVP中的视图协定(比如说B)。当我要求类型A和类型B时,我想在依赖图中有一个相同的实例。如何实现?

简而言之:

class MyAbstractView implements MyInterface {

}

class MyView extends MyAbstractView implements MyViewContract {

}

@Module
class MyModule {
    @Provides
    MyInterface provideMyInterface() {
     return new MyView();
    }

    @Provides
    MyViewContract provideMyViewContract() {
       // I cannot call provideMyInterface() and return here
       // but I want to return the same MyView instance
       // ????
   }
}

注意:我不想拥有MyView并将其保存在@Module中!!

1 个答案:

答案 0 :(得分:1)

您可以在模块中使用构造函数注入以及@Binds批注来实现此目的。只需添加一个构造函数并在@Inject中用MyView对其进行注释。然后,您可以将MyView标记为@Singleton,以便在所有地方都使用相同的实例(假设该组件的作用域也为@Singleton)。

@Singleton
class MyView extends MyAbstractView implements MyViewContract {
    @Inject
    public MyView() {}
}

@Module
abstract class MyModule {
    @Binds
    abstract MyInterface provideMyInterface(MyView myView);

    @Binds
    abstract MyViewContract provideMyViewContract(MyView myView);
}