android - Dagger 2 和 ViewModel 自定义范围

标签 android mvvm viewmodel dagger-2

目前在我的 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/

相关文章:

c# - 更改 ModelView 中的样式(MVVM + WPF)

asp.net-mvc - ASP.NET MVC - Controller 的工作

Android 创建具有堆叠 View 的垂直轮播

android - 禁用 PRAGMA recursive_triggers

wpf - 如何使 Wpf 数据网格单元格仅数字

java - Android MVVM 与数据绑定(bind)

android - checkout 源代码后如何切换到特定版本的 Android?

android - 如何在 android 中使用 Room Persistence Library 查询嵌套的嵌入式对象?

java - 刚刚创建后更新注释

java - 如何从 View 模型正确调用网络获取函数