interface SomethingDependencies {
val dep1: Dep1
val dep2: Dep2
...
val depN: DepN
}
object SomethingFactory {
fun create(dependencies: SomethingDependencies): Something {
return DaggerSomethingComponent.factory().create(dependencies).getImpl()
}
}
interface Something { ... }
internal class SomethingImpl @Inject constructor(
// в конструктор может приходить всякое, как Dep1..DepN, так и другие объекты, построенные на их основе
): Something
@Component(dependencies=[SomethingDependencies::class]
internal interface SomethingComponent {
@Component.Factory
interface Factory {
fun create(dependencies: SomethingDependencies): SomethingComponent
}
fun getImpl(): SomethingImpl
}
@SubComponent
interface MainActivityComponent: SomethingDependencies {
...
}
@Provides
fun something(dependencies: MainActivityComponent): Something { // не забываем, что MainActivityComponent реализует SomethingDependencies
return SomethingFactory.create(dependencies)
}