使用 Dagger 2 进行 Jetpack Compose 和 DI

问题描述 投票:0回答:1

最近我在做一个小项目,想到了一件事关于 compose 和 dagger。

通常我使用带有注入功能的 Dagger,这对我来说是一切,但现在看来它不起作用,因为我们没有任何“对象”可以注入。所以我的问题是现在如何注射?我仍然可以像以前一样创建组件,但似乎我需要自己提供属性或创建一些 @Composable 函数来为我做这件事。

所以我的问题是现在如何使用 DI(尤其是 Dagger)和 Compose?

我正在寻找一些文章,但大多数都是关于刀柄的,我想使用纯匕首。

android dependency-injection android-jetpack-compose dagger-2
1个回答
0
投票

总而言之,我最终得到了这个我已经使用了一段时间的解决方案:

class DaggerViewModelProvider {

    companion object {
        @Composable
        @Suppress("unchecked_cast")
        inline fun <reified VM : ViewModel> daggerViewModel(
            key: String? = null,
            crossinline viewModelInstanceCreator: @DisallowComposableCalls () -> VM
        ): VM {
            val factory = remember(key) {
                object : ViewModelProvider.Factory {
                    override fun <VM : ViewModel> create(modelClass: Class<VM>): VM {
                        return viewModelInstanceCreator() as VM
                    }
                }
            }
            return viewModel(key = key, factory = factory)
        }
    }
}

并从我需要的任何地方调用它,如下所示:

val viewModel = DaggerViewModelProvider.daggerViewModel {
            authComponent.authViewModel
        }
© www.soinside.com 2019 - 2024. All rights reserved.