blog-resources
blog-resources copied to clipboard
Add sample to ensure subcomponents only use allowed bindings from parent component
In this example AppComponent has GlobalScope, this check prevents sub scoped (Activity scoped) classes from injecting global coroutine scope accidentally.
Example error:
dagger-spi-validations/app/build/tmp/kapt3/stubs/debug/dev/arunkumar/dagger/spi/validation/di/AppComponent.java:8: error: [dev.arunkumar.dagger.validator.TridentValidator] Activity scoped bindings must not use global coroutine scope
public abstract interface AppComponent extends dagger.android.AndroidInjector<dev.arunkumar.dagger.spi.validation.SpiValidation> {
^
dev.arunkumar.dagger.spi.validation.Presenter is injected at
dev.arunkumar.dagger.spi.validation.MainActivity.presenter
dev.arunkumar.dagger.spi.validation.MainActivity is injected at
dagger.android.AndroidInjector.inject(T) [dev.arunkumar.dagger.spi.validation.di.AppComponent → dev.arunkumar.dagger.spi.validation.MainActivity_Builder_MainActivity.MainActivitySubcomponent]
FAILURE: Build failed with an exception.
Alternative
- Use component with dependencies to explicitly declare what can be shared.