有趣的是,很难找到这个答案。
我已经使用Dagger-Android已有一段时间了,并设置了我的整个依赖图。我正在使用范围,限定符以及所有这些好东西。我不再是Dagger的新手,但是可以说我在Android设置中一直以非常标准的方式使用它,并且一切都进行得很好。
我第一次意识到,我想手动请求自己的图形中某个类的新实例,而我希望每次都将其作为新实例。
执行此操作的最佳方法是什么?我想知道是否有办法利用非@ Singleton /非作用域的提供程序并自己调用某种create()
方法,还是最好自己创建一个工厂并使该工厂成为单例/作用域实例并在需要时使用我的工厂来获取新实例? [我应该提一下,此类肯定没有拥有一个空的构造函数,因此需要在注入图中定义的其他类的注入实例。”
(此外,如果答案是在Android上下文中,这可能会最大程度地帮助您;例如,我在一个ViewModel中,并且需要在我的一个模块中定义的某个类的新实例。)
答案 0 :(得分:1)
只要您不限制依赖项,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。