首页 > 解决方案 > 使用 Dagger 初始化模块的顺序不同

问题描述

我正在使用 Dagger 2 来初始化我的应用程序中的一些模块,这些模块最初是在我的 Application 类中初始化的。我希望这些模块以特定顺序初始化。我正在使用初始化程序集来初始化我的模块,但它们是按随机顺序执行的。

我的初始化模块看起来像这样

@Module class InitializerModule {

    // initialize Profile library
    @Provides @IntoSet
    fun initProfileLib(): Initializer = ProfileHelper()

    // initialize Video library
    @Provides @IntoSet
    fun initVideoModule(): Initializer = VideoHelper()

    // initialize Video library
    @Provides @IntoSet
    fun initQuestModule(): Initializer = QuestHelper()

    // initialize Audio library
    @Provides @IntoSet
    fun initAudioModule(): Initializer = AudioHelper()

    // initialize Analytics library
    @Provides @IntoSet
    fun initAnalyticsModule(): Initializer = AnalyticsHelper()

    // initialize Login library
    @Provides @IntoSet
    fun initLogin(): Initializer = LoginHelper() }

应用模块代码

@Module(includes = [InitializerModule::class])
open class AppModule {
}

应用类代码

    class Application: DaggerApplication(){
    @set:Inject
        var initializerSet: Set<@JvmSuppressWildcards Initializer>? = null

      override fun attachBaseContext(base: Context?) {
        super.attachBaseContext(base)
        MultiDex.install(this)
        initDaggerComponent()
    }
    override fun onCreate() {
    for (init in initializerSet!!) {
         init.initialize(applicationContext)
      }
     }
   }

每次我执行代码时,顺序都是随机的。

ProfileHelper LoginHelper AnalyticsHelper VideoHelper QuestHelper AudioHelper

我的 build.gradle

    implementation "com.google.dagger:dagger:2.23.2"
    implementation "com.google.dagger:dagger-android:2.23.2"
    implementation "com.google.dagger:dagger-android-support:2.23.2"
    kapt "com.google.dagger:dagger-compiler:2.23.2"
    kapt "com.google.dagger:dagger-android-processor:2.23.2"

如何使用 Dagger 维护初始化顺序?

标签: androiddependency-injectionmoduledagger-2dagger

解决方案


推荐阅读