Означает ли это, что во время компиляции Dagger может решить, запрашивать ли этот субкомпонент путем сканирования кодовой базы, чтобы увидеть, зависит ли какой-либо объект в этом модуле от какого-либо кода, если нет, то не будет MySubComponent (и он содержитобъекты) генерироваться во время компиляции? В противном случае Dagger будет генерировать MySubComponent (и объекты принадлежат ему)?
Я думаю, что вы перепутали code generation
и object instantiated
. Код генерируется всегда (т. Е. MySubComponent
всегда генерируется Dagger), но погода на нем instantiated
основана на том, необходим ли он для объекта, созданного MyModule
.
If MyModule
предоставляет объект, который требуется для строителя MySubComponent
, только когда этот объект создан, тогда строителем MySubComponent
будет instantiated
, как показано в примере из https://dagger.dev/subcomponents.html
@Singleton
class RequestRouter {
@Inject RequestRouter(
Provider<RequestComponent.Builder> requestComponentProvider) {}
void dataReceived(Data data) {
RequestComponent requestComponent =
requestComponentProvider.get()
.data(data)
.build();
requestComponent.requestHandler()
.writeResponse(200, "hello, world");
}
}
При создании RequestRouter
дается Provider<RequestComponent.Builder> requestComponentProvider
. И только после вызова функции dataReceived
создается Субкомпонентный конструктор (т. Е. RequestComponent
), который затем создает Субкомпонент (т. Е. RequestComponent
).
При наличии @Module(subcomponents = MySubComponent.class)
allowотложенное создание его подкомпонента, следовательно, он заявляет следующее
этот код может заставить Dagger автоматически обнаруживать, запрашивается ли подкомпонент.
Вышеприведенное утверждение предназначено для этой целиконтрастирования с другим подходом instantiating
MySubComponent, как указано ниже
Другой подход заключается в том, чтобы заставить подкомпонент (или его построитель) всегда быть instantiated
независимо от этого, создав его через ParentComponent.
@Component
interface MyParentComponent {
MySubComponent getSubComponent();
}
Вы можете обратиться к статье https://medium.com/@elye.project/dagger-2-subcomponent-through-module-or-component-comparison-92486767a861 для более подробной информации между ними.
Надеюсь, это прояснится.