Why does it still work without installing AndroidInjectionModule?

According to the dagger documentation about objects injection objects , it says that the installation AndroidInjectionModulein your application component. However, everything is fine without him.

Does this mean that I do not need to announce it? Under what circumstances will this be wrong?

For example:
Injection instance

data class Food(val name: String)

Module

@Module
class FoodModule{
    @Provides
    fun provideFood(): Food {
        return Food("cholocate")
    }
}

Bindingmodule

@Module
abstract class MainActivityModule {
    @ContributesAndroidInjector(modules = [FoodModule::class])
    abstract fun FoodShop(): MainActivity
}

AppComponent (without installing AndroidInjectionModule)

@Component(modules = [MainActivityModule::class])
interface AppComponent{
    fun inject(app: App)
}

application

class App : Application(), HasActivityInjector {
    @Inject
    lateinit var dispatchingActivityInjector: DispatchingAndroidInjector<Activity>

    override fun onCreate() {
        super.onCreate()
        DaggerAppComponent.create().inject(this)
    }

    override fun activityInjector(): AndroidInjector<Activity> {
        return dispatchingActivityInjector
    }
}

Mainactivity

class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var food: Food

    override fun onCreate(savedInstanceState: Bundle?) {
        AndroidInjection.inject(this)
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.d("test", "Get ${food.name}")
    }
}

He gets chocolate successfully at MainActivity.

+4
source share
1 answer

Does this mean that I do not need to announce it? Under what circumstances will this be wrong?

It actually seems that you do not need to declare it, but this can lead to compilation errors if you do not.


AndroidInjectionModule, , @Multibinds .

@Multibinds
abstract Map<Class<? extends Activity>, AndroidInjector.Factory<? extends Activity>>
    activityInjectorFactories();

, @Multibinds, ,

@Multibinds , @IntoSet, @ElementsIntoSet @IntoMap, , .

, , , AndroidInjectionModule . Android Injection undefined -, , , , , .

, , , @ContributesAndroidInjector, @Binds @IntoMap etc., . , , @Multibinds, AndroidInjectionModule .


, , , , . , javadoc , , .

, Application.

+3

Source: https://habr.com/ru/post/1691834/


All Articles