Android 跨Gradle模块使用Dagger多重绑定

Android 跨Gradle模块使用Dagger多重绑定,android,gradle,dependency-injection,guice,dagger,Android,Gradle,Dependency Injection,Guice,Dagger,匕首使用者的同伴们…我是在试图做一些不可能的事情吗?下面是我的应用程序生成的渐变模块视图 想象一下,我的应用程序有一个导航抽屉。我希望抽屉中的列表项基于通过多重绑定填充的集合进行添加。此多重绑定的贡献者跨>1个梯度模块。 例如,从user模块添加名为“Account”的列表项,从legal模块添加名为“Terms&Conditions”的第二项,并从SearchGradle模块添加“Search”导航条目。这些模块可以被认为是独立的应用程序,当捆绑在一起形成完整的应用程序体验。它们可以自己运行

匕首使用者的同伴们…我是在试图做一些不可能的事情吗?下面是我的应用程序生成的渐变模块视图

想象一下,我的应用程序有一个导航抽屉。我希望抽屉中的列表项基于通过多重绑定填充的集合进行添加。此多重绑定的贡献者跨>1个梯度模块。 例如,从
user
模块添加名为“Account”的列表项,从
legal
模块添加名为“Terms&Conditions”的第二项,并从
Search
Gradle模块添加“Search”导航条目。这些模块可以被认为是独立的应用程序,当捆绑在一起形成完整的应用程序体验。它们可以自己运行

关于这个的Dagger文档看起来像Guice的复制粘贴,但有一个很大的复杂性。它指出

“Dagger允许您将多个对象绑定到一个集合中,即使在 使用多重绑定将对象绑定到不同的模块中。”

…但它的意思是Dagger@Modules,对吗?是否可以跨Gradle模块填充多重绑定?我尝试过类似的东西,但并不是我所期望的(并不是所有的贡献都被收集到)

父应用程序

user
Gradle模块,包含Dagger@module

运行应用程序时,只有在调用应用程序“上下文”下的贡献才可用

@Inject @NavigationContribution Set<NavigationEntry> navigationEntries();

@jeff bowman-我所缺少的就是
PluginModule
上的
includes={}
。Zac Sweers关于同一主题的博客文章为我指出了正确的方向。

你能确认你列出的其他Dagger模块是否已安装在你的顶级组件中吗?嗨,杰夫,谢谢你回来。因此,我的顶级组件安装了
PluginModule
以及提供贡献的模块(
AccountModule
LegalModule
等)。如果有意义,模块彼此相邻?我将画一幅画并把它添加到问题中。
@Module
class LegalModule {
  @Provides
  @NavigationContribution 
  @IntoSet
  static NavigationEntry provideLegalNavigation() {
    return ...;
  }
}
@Module
class AccountModule {
  @Provides
  @NavigationContribution 
  @IntoSet
  static NavigationEntry provideAccountNavigation() {
    return ...;
  }
}
@Inject @NavigationContribution Set<NavigationEntry> navigationEntries();
@ApplicationLifecycle
@Component(
    modules = {
        OceanLifeModule.class,
        AddSpotActivityModule.class,
        ModelModule.class,
        PluginModule.class
    },
    dependencies = {
        NavigationComponent.class,
        LegalComponent.class,
        PreferenceComponent.class,
        DomainComponent.class
    }
)