blog-resources icon indicating copy to clipboard operation
blog-resources copied to clipboard

Add sample to ensure subcomponents only use allowed bindings from parent component

Open arunkumar9t2 opened this issue 2 years ago • 0 comments

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.

arunkumar9t2 avatar Jul 11 '23 05:07 arunkumar9t2