mvvm 使用 dagger2 和 ViewModelFactory,不了解默认注入



我正在研究带有AAC示例"https://github.com/android/architecture-samples"的mvvm。 难以理解,我发现了一些无法理解的东西。 该项目具有 ViewModel 和 ViewModelFactory。 我想知道的一点是,DefaultTasksRepository是如何注入TaskFragment的ViewModel的。

class TasksFragment : DaggerFragment() {
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
private val viewModel by viewModels<TasksViewModel> { viewModelFactory }
}
class TasksViewModel @Inject constructor(
private val tasksRepository: TasksRepository
) : ViewModel() {
}
class DefaultTasksRepository @Inject constructor(
@TasksRemoteDataSource private val tasksRemoteDataSource: TasksDataSource,
@TasksLocalDataSource private val tasksLocalDataSource: TasksDataSource,
private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO
) : TasksRepository {
}
interface TasksRepository {
suspend fun getTasks(forceUpdate: Boolean = false): Result<List<Task>>
suspend fun getTask(taskId: String, forceUpdate: Boolean = false): Result<Task>
suspend fun saveTask(task: Task)
suspend fun completeTask(task: Task)
suspend fun completeTask(taskId: String)
suspend fun activateTask(task: Task)
suspend fun activateTask(taskId: String)
suspend fun clearCompletedTasks()
suspend fun deleteAllTasks()
suspend fun deleteTask(taskId: String)
}
  1. DefaultTasksRepository @Inject constructor((,这已经在 dagger 中注册,以便我们可以从任何地方使用它的引用。

  2. TasksViewModel
  3. @Inject constructor((,这将创建 TasksViewModel 引用,但在此之前它将创建 DefaultTasksRepository 的实例,并将传递到 TasksViewModel 的构造函数中。

  4. 然后,您可以注入任务视图模型并在任何地方使用。

相关内容

最新更新