(Кинжал 2) Обеспечить один и тот же экземпляр для разных типов в MVP - PullRequest
0 голосов
/ 19 декабря 2018

Я следую схеме MVP в своем приложении.У меня есть представление, которое расширяет другой класс абстрактного представления, реализует другой интерфейс (скажем, A), а также реализует контракт View (скажем, B) в MVP.Я хочу иметь один и тот же экземпляр в графе зависимостей, когда спрашиваю типы 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 голосов
/ 19 декабря 2018

Вы можете использовать инжекцию конструктора вместе с аннотацией @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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...