Ответ
Lazy<T> в Dagger создается один раз для каждого инжектируемого поля. При первом вызове get() происходит инициализация объекта, а последующие вызовы возвращают кэшированный экземпляр. Это ленивая инициализация, но сам Lazy создается при инжекции.
Пример:
class MyClass {
@Inject lateinit var lazyDep: Lazy<HeavyDependency>
fun useDependency() {
val dep = lazyDep.get() // инициализация при первом вызове
}
}