如何结合Dagger2和协程?

时间:2019-07-12 14:15:05

标签: android dagger kotlin-coroutines

我正在使用dagger2 + retrofit + coroutines + firebaseRemoteConfig

每次在Firebase控制台中更改远程配置时,我都无法更新totoName。问题是我使用协程...您能帮我吗?谢谢

    @Provides
    @Singleton
    @Named("toto")
    suspend fun provideToto(remoteConfig: FirebaseRemoteConfig): String {
        var totoName  = fetchToto(remoteConfig)
        return totoName
    }

    suspend fun fetchToto(remoteConfig: FirebaseRemoteConfig): String {
        var totoName = remoteConfig.getString("toto_name")

        withContext(Dispatchers.IO) {
            remoteConfig.fetchAndActivate().addOnCompleteListener { task ->
                totoName  = remoteConfig.getString("toto_name")
            }
        }
        return totoName
    }

2 个答案:

答案 0 :(得分:1)

我不确定Dagger本身是否配置为可与悬架一起使用。匕首通过。首先,它要求对象,如果对象尚未准备就绪,则要求创建对象。没有任何等待暂停完成的内置功能。此外,匕首对象是延迟初始化的Singleton,因此您只能得到自己创建的对象。因此,您已经节省了内存。 plus firebase在应用程序级别进行了初始化(预加载)。因此,您始终准备使用Firebase实例。因此无需暂停创建。

答案 1 :(得分:0)

那当然不行。首先,如果您使用@Singleton,则整个应用程序只能填写一个fetch()

接下来,我不太确定你是否可以用匕首来做到这一点。您的方法应位于相应的类中,而不应位于某些依赖关系图上。