有趣的是,这个答案是多么难以找到。
我已经使用 Dagger - Android 一段时间了,并且已经设置了整个依赖关系图。我正在使用范围、限定符以及所有这些好东西。我不再是 Dagger 新手,但可以说我一直在 Android 设置中以相当标准的方式使用它,一切都进展顺利。
我第一次意识到我想自己手动请求图中某个类的新实例,并且我want每次都是一个新实例。
这样做的最佳方法是什么?我想知道是否有一种方法可以利用非 @Singleton/非作用域提供程序并调用某种create()
我自己方法,或者最好自己创建一个工厂并使该工厂成为单例/作用域实例,并在需要时使用我的工厂获取新实例? [我应该提到这门课肯定会not有一个空的构造函数,因此需要注入我的注入图中定义的其他类的实例。]
(另外,如果答案是在 Android 的上下文中,这可能会很有帮助;也就是说,我在一个 ViewModel 中,并且需要在我的模块之一中定义的某个类的新实例。)
只要您不限制依赖项的范围,Dagger 就会为您提供一个新实例。
要手动获取依赖项的新实例,您可以注入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 https://proandroiddev.com/dagger-2-part-three-new-possibilities-3daff12f7ebf.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)