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

我一直在使用 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 .


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!