如何在Dagger 2中创建包含DAO对象的View Model?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Dagger 2中创建包含DAO对象的View Model?相关的知识,希望对你有一定的参考价值。

我在Activity中创建了android ViewModel:

EventViewModel model = ViewModelProviders.of(this).get(EventViewModel.class);

为此,我创建了EventViewModel

public class EventViewModel extends ViewModel {

    private final EventDao eventDao;

    public EventViewModel(EventDao eventDao) {
        this.eventDao = eventDao;
    }

    public void createEvent(final Event event) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                eventDao.insert(event);
            }
        }).start();
    }
}

我了解到我必须创建自定义工厂才能将EventDao注入EventViewModel。好吧,让我说我做到了。

public class ViewModelFactory implements ViewModelProvider.Factory {

    private final EventDao eventDao;

    @Inject
    public ViewModelFactory(EventDao eventDao) {
        this.eventDao = eventDao;
    }


    @NonNull
    @Override
    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
        if (modelClass == EventViewModel.class) {
            return (T) new EventViewModel(eventDao);
        }
        return null;
    }
}

但接下来该怎么办?我看到了几种方式。相信谷歌的例子,我必须在我的活动中做下一步:

EventViewModel model = ViewModelProviders.of(this, new ModelFactory(eventDao)).get(EventViewModel.class);

1)但是我在哪里可以获得MyActivity中的eventDao

2)如果使用dao类,我是否需要为每个ModelFactory创建自定义ViewModel

我使用Dagger 2,我只想了解如何用DAO创建ViewModel并在MyActivity中使用这个ViewModel

答案

您在活动中注入ViewModelFactory。 ViewModelFactory将通过构造函数注入获取EventDao。您将注入的ViewModelFactory实例称为viewModelFactory传递给ViewModelProviders

EventViewModel model = ViewModelProviders.of(this, viewModelFactory).get(EventViewModel.class);

以上是关于如何在Dagger 2中创建包含DAO对象的View Model?的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中创建 DAO 的正确方法

如何在 PHP 中创建通用 DAO 接口?

在 dao room 数据库中创建一个带有 body 的自定义函数

如何在java中的每个arraylist中创建具有不同类型对象的arraylist数组?

是否可以在没有 Dagger 模块的情况下提供 DAO 或 Room 数据库

如何在 React Native 中创建文本边框?