Многомодульная инъекция Dagger2 объекта, реализующего несколько интерфейсов

#android #dagger-2 #dagger #multi-module

#Android #dagger-2 #кинжал #многомодульный

Вопрос:

Допустим, у нас есть следующие модули в нашем приложении (стрелка означает зависит от) :

приложение -> {module1, module2} -> {основной модуль}.

В нашем модуле 1 определен интерфейс1, а в нашем модуле 2 определен Интерфейс2. Наш модуль приложения имеет реализацию interface1n2 (реализует Interface1 и Interface2), определенную и созданную как одноэлементный.

Вопрос: С точки зрения экосистемы dagger2, как предоставить module1 и module2 один и тот же экземпляр Interface1n2Implementation?

Ответ №1:

Вы AppModule можете создать реализацию с определенной областью действия ( @Singleton в данном случае), и у вас может быть 2 метода provides, которые возвращают этот экземпляр реализации.

ПРИМЕЧАНИЕ: Непроверенный

 @Module
object AppModule {
    @Provides
    @Singleton
    internal fun provideImplementation() : Interface1n2Implementation = 
    Interface1n2Implementation()

    @Provides
    fun provideInterface1(implementation: Interface1n2Implementation) : Interface1 = implementation

    @Provides
    fun provideInterface2(implementation: Interface1n2Implementation) : Interface2 = implementation
}
  

Комментарии:

1. Спасибо, тестирование. Не работает из коробки, но я думаю, что идея должна жить, позвольте мне просто хорошо ее отладить.