gpt4 book ai didi

android - Dagger:如果我每次都*想要*一个新实例怎么办?

转载 作者:行者123 更新时间:2023-12-04 11:33:18 36 4
gpt4 key购买 nike

有趣的是,这个答案是多么难以找到。

我一直在使用 Dagger - Android 一段时间,并设置了我的整个依赖关系图。我正在使用范围,限定符,所有这些好东西。我不再是 Dagger 新手了,但我只想说我在我的 Android 设置中一直在以一种非常标准的方式使用它,而且一切都很顺利。

第一次,我意识到我想自己手动请求图表中某个类的新实例,并且我希望它每次都是一个新实例。

这样做的最佳方法是什么?我想知道是否有办法利用非@Singleton/非范围提供程序并调用某种 create()自己创建方法,或者最好自己创建一个工厂并使该工厂成为单例/范围实例,并在需要时使用我的工厂获取新实例? [我应该提到这个类肯定不会有一个空的构造函数,所以需要注入(inject)我的注入(inject)图中定义的其他类的注入(inject)实例。]

(此外,如果答案是在 Android 的上下文中,它可能会最有帮助;也就是说,我在一个 ViewModel 中,并且需要在我的一个模块中定义的某个类的新实例。)

最佳答案

只要您不限定依赖项,Dagger 就会为您提供一个新实例。

要手动获取一个新的依赖实例,你可以注入(inject) Provider而是使用它的get()方法,每次调用它都会给你一个新的实例。

模块部分并没有真正改变:

@Module
class AppModule {

@Provides
fun provideSomeObject(): SomeObject = SomeObject()
}

在你的类里面
class SomeClass {
// We don't inject the object anymore
// @Inject lateinit var myObject : SomeObject

// We'll inject it's provider
@Inject lateinit var myObject : Provider<SomeObject>

fun someMethod(){
// Here, instance1 and instance2 are NOT same objects
val instance1 = myObject.get()
val instance2 = myObject.get()
}
}

您可以阅读更多 here .

关于android - Dagger:如果我每次都*想要*一个新实例怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53763934/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com