Replies: 1 comment 1 reply
-
You can do this today by hiding your component behind an interface. interface NetworkComponent {
val repo: Repo
}
@Component
abstract class NetworkComponentImpl : NetworkComponent {
@Provides
fun provideOkHttpClient(): OkHttpClient = { /* ... */ }
}
@Inject
class Repo(val httpClient: OkHttpClient)
@Component
abstract class DomainComponent(@Component val parent: NetworkComponent) but yeah there could be room for improvement here. There tricky part is knowing what to generate so that the transitive dependencies can still be constructed in a downstream component, which could be in another module. |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Hi! Thanks for the wonderful library!
I wonder how hard would it be to have some providers allowed to be "internal", for example
I.e. in my setup (perhaps a multi-gradle-module one) I only want the component to "export"
Repo
and hideOkHttpClient
, which I want to provide only "internally", because while building it I still might want to use DI, as it could be helpful if my dependency building is complex, but in the end I don't want anything apart the final object to "leak" and be visible/usable on the consuming side. Trying to injectOkHttpClient
in any child component would be an error in this case.This is what I very much miss in Dagger, perhaps
kotlin-inject
could have such a feature?Beta Was this translation helpful? Give feedback.
All reactions