【问题标题】:(Dagger 2) Provide same instance for different types in MVP(Dagger 2) 为 MVP 中的不同类型提供相同的实例
【发布时间】:2018-12-19 13:34:55
【问题描述】:

我在我的应用程序中遵循 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 中!!

【问题讨论】:

  • 你检查了@Named注解吗?

标签: android dagger-2 android-mvp


【解决方案1】:

您可以在模块中使用构造函数注入和@Binds 注释来实现此目的。只需添加一个构造函数并在MyView 中使用@Inject 对其进行注释。然后,您可以将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);
}

【讨论】:

  • 解决了我的问题!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 1970-01-01
相关资源
最近更新 更多