为什么在组件的模块上而不是直接在组件上设置subcomponents =
属性?对我来说这似乎不是很直观,所以我想一定是有原因的。
@Component(modules = ExampleModule.class)
public interface AppComponent
@Module(subcomponents = ActivityComponent.class)
public abstract class ExampleModule
答案 0 :(得分:1)
从某种意义上说,将子组件包含在模块中更有意义:它们是私有的实现细节,不必公开公开,而那些公开的子组件仍可以作为构建器方法列出。直接在组件上。为了进行比较,您也不能直接在组件上定义@Provides
或@Binds
方法。这些也会影响该组件的实现细节,并且不一定是公开可见的。
但是,你的观点是正确的;截至2019年4月29日,这是an open and triaged issue(#1463),由Google贡献者David P. Baker提交。
我们看到一种模式,人们创建空模块只是为了向组件添加子组件:
[...]
建议将
subcomponents
添加到dagger.Component
,dagger.Subcomponent
,dagger.producers.ProductionComponent
和dagger.producers.ProductionSubcomponent
中。这将在概念上简化这些情况并减少样板,因为不需要空模块。