Когда Dagger2 создает объекты зависимостей, определенных в модулях?

#dependency-injection #dagger-2 #dependency-management #dagger

Вопрос:

Я использую Dagger2 для DI. Как мне сгруппировать классы в компонент?

Удовлетворяет ли Dagger зависимостям всех классов, определенных в одном интерфейсе @Component во время выполнения?

Например, если у меня есть следующий компонент:

 @Component(modules = {ModuleA.class, ModuleB.class, ModuleC.class})
public interface Component {
   
   ClassA getClassA();
   ClassB getClassB();
   ClassC getClassC();
}
 

Здесь ClassA, ClassB и ClassC имеют перекрывающиеся зависимости, но не совсем одинаковые.

Теперь, когда я звоню:

 ClassA classA = DaggerComponent.create().getClassA();
 

Создает ли Dagger2 объекты, удовлетворяющие всем классам, присутствующим в Компоненте, или классы только для удовлетворения ClassA ?

Ответ №1:

Проанализировал файлы, созданные Dagger при сборке. На самом деле он создает объекты, необходимые только для ClassA, когда вызывается следующий оператор:

 DaggerComponent.create().getClassA();