实现多个接口的实体的Dagger2多模块注入

问题描述

假设我们的应用程序中包含以下模块(箭头表示依赖):

app-> {module1,module2}-> {核心模块}。

我们的模块1定义了接口1,而我们的模块2定义了接口2。我们的应用程序模块已定义并实例化为Singleton的Interface1n2Implementation(实现Interface1和Interface2)。

问:就dagger2生态系统而言,如何为module1和module2提供相同的Interface1n2Implementation实例?

解决方法

您的AppModule可以创建具有特定范围(在这种情况下为@Singleton)的实现,并且您可以有2个提供方法来返回此实现实例。

注意:未经测试

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

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

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