// Deps interface Database interface Network // Child interface ChildRepository class Child(dependencies: Dependencies) { interface Dependencies { val database: Database val network: Network val repository: ChildRepository } } // Parent class Parent(dependencies: Dependencies) { init { val component = DaggerParentComponent.factory().create(dependencies) val child = component.child() // Get the Child } interface Dependencies { val database: Database val network: Network } } internal class ChildRepositoryImpl : ChildRepository @Module internal class ParentModule { @Provides fun childRepository(): ChildRepository = ChildRepositoryImpl() @Provides fun child(component: ParentComponent): Child = Child(component) } @Component( modules = [ParentModule::class], dependencies = [Parent.Dependencies::class] ) internal interface ParentComponent : Child.Dependencies { fun child(): Child @Component.Factory interface Factory { fun create( dependencies: Parent.Dependencies ): ParentComponent } }