目前在我的 Android MVVM 项目中,我有三个 Dagger 作用域:
- 单例
- Activity 范围
- fragment 范围
它们在对象生命周期管理方面非常有用。但是有一种情况我无法解决:
在 Dagger 2 中实现 View 模型范围在技术上是否可行?(当然是来自架构组件的 View 模型)。
让我们以这种情况为例:我希望能够将某个类的相同实例注入(inject) View 模型和 fragment (它是该 View 模型的宿主)。只要 View 模型存在,这个实例就必须存在,所以如果我旋转屏幕并重新创建 fragment ,它将注入(inject)相同的实例。
现在我所能想到的就是在 Singleton 范围内拥有该实例,但这并不好,因为一旦 View 模型被销毁,我必须进行一些手动状态管理以清除该实例的状态。
最佳答案
您可以像这样为 View 模型创建注释类
@Documented
@MapKey
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewModelKey {
Class<? extends ViewModel> value();
}
我已经在该存储库中编写了如何将 View 模型注入(inject) Activity https://github.com/ibrahimsn98/android-mvvm-dagger-2-rxjava-example
关于android - Dagger 2 和 ViewModel 自定义范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53563395/