Sla*_*ama 6 android dependency-injection dagger
有趣的是,找到这个答案是多么困难。
我已经使用 Dagger - Android 有一段时间了,并设置了我的整个依赖关系图。我正在使用范围、限定符,所有这些好东西。我不再是 Dagger 新手了,但可以说我一直在我的 Android 设置中以非常标准的方式使用它,一切都进展顺利。
我第一次意识到我想自己手动请求图形中某个类的新实例,并且我希望它每次都是一个新实例。
这样做的最佳方法是什么?我想知道是否有办法利用非@Singleton/非作用域提供者并create()自己调用某种方法,或者最好自己创建一个工厂并使该工厂成为单例/作用域实例并使用我的工厂在我需要时获取新实例?[我应该提到这个类绝对不会有一个空的构造函数,所以需要注入在我的注入图中定义的其他类的实例。]
(此外,如果答案是在 Android 的上下文中,它可能会最有帮助;也就是说,我在一个 ViewModel 中,并且需要在我的一个模块中定义的某个类的新实例。)
只要您不限定依赖项,Dagger 就会为您提供一个新实例。
要手动获取依赖项的新实例,您可以Provider改为注入它并使用它的get()方法,每次调用它时它都会为您提供一个新实例。
模块部分并没有真正改变:
@Module
class AppModule {
@Provides
fun provideSomeObject(): SomeObject = SomeObject()
}
Run Code Online (Sandbox Code Playgroud)
在你的课堂上
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()
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读更多内容。
| 归档时间: |
|
| 查看次数: |
2837 次 |
| 最近记录: |