Почему подкомпоненты Dagger объявлены в модуле, а не в родительском компоненте напрямую? - PullRequest
0 голосов
/ 29 апреля 2019

Почему атрибут subcomponents = установлен для модуля компонента, а не для компонента напрямую? Это не кажется мне интуитивно понятным, поэтому, я думаю, должна быть причина.

@Component(modules = ExampleModule.class)
public interface AppComponent 

@Module(subcomponents = ActivityComponent.class)
public abstract class ExampleModule

1 Ответ

1 голос
/ 29 апреля 2019

В некотором смысле для компонентов больше смысла находиться в модулях: они являются частными деталями реализации, которые не обязательно публикуются публично, а те, которые раскрыты , все еще могут быть перечислены как методы компоновщика в компонент напрямую. Для сравнения, вы также не можете определять методы @Provides или @Binds непосредственно для компонентов; они также влияют на детали реализации компонента и не обязательно видны публично.

Однако ваша точка зрения остается; по состоянию на 29 апреля 2019 года это открытый и спровоцированный вопрос (# 1463), зарегистрированный участником Google Дэвидом П. Бейкером.

Мы видим, как люди создают пустые модули, просто чтобы добавить подкомпоненты к компонентам:

[...]

Предложить добавить subcomponents к dagger.Component, dagger.Subcomponent, dagger.producers.ProductionComponent и dagger.producers.ProductionSubcomponent.

Это концептуально упростит эти случаи и сократит шаблон, поскольку нет необходимости в пустом модуле.

...