MvvmCross - 如何在Windows商店后台任务中访问SQLite?

时间:2014-03-20 20:53:48

标签: sqlite background store mvvmcross

我有一个使用mvvmcross sqlite插件(社区版)的商店应用。此应用程序具有定期后台任务,该任务访问数据库以使数据显示在实时磁贴中。我无法看到如何从后台任务访问此数据库。我想在后台任务中使用mvvmcross sqlite插件,但我不知道如何正确初始化mvvmcross环境。

2 个答案:

答案 0 :(得分:1)

如果您想要初始化包含所有应用的完整MvvmCross框架,那么您需要运行Setup课程。

在WinRT中,这可以像调用一样简单:

         var setup = new Setup(null /*rootFrame*/);
         setup.Initialize();

虽然可能需要你做一些工作:

  1. 确保您的演示者不使用null rootFrame
  2. 提供一些其他方法来创建UI线程调度程序 - 目前MvxStoreViewDispatcher依赖于.Dispatcher访问权限 - 请参阅https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.WindowsStore/Views/MvxStoreViewDispatcher.cs - 要执行此操作,您可以覆盖InitializeViewDispatcher用类似的东西:

    protected override void InitializeViewDispatcher()
    {
        if (_rootFrame != null)
        {
             base.InitializeViewDispatcher(); return;
        }
    
        var dispatcher = new NonMainThreadDispatcher();
        Mvx.RegisterSingleton<IMvxMainThreadDispatcher>(dispatcher);
    }
    
    public class NonMainThreadDispatcher : MvxMainThreadDispatcher
    {
        public bool RequestMainThreadAction(Action action)
        {
            action();
        }
    }
    
  3. 如果您想初始化的功能少于整个框架(例如出于内存原因),那么您还可以考虑为后台任务创建特殊的SetupApp类。

    除了&GT;这类似于Android中的问题 - Using MvvmCross from content providers and activitiesMvvmCross initialization

答案 1 :(得分:1)

我能够以直截了当的方式解决问题。由于后台任务只需要来自PCL核心项目的SQLite数据服务,我做了以下几点:

  1. 包含对Core项目的引用。
  2. 为MvvmCross和SQLite社区插件添加了nuget包。
  3. 删除了执行mvvmcross安装时添加的所有文件和文件夹:Bootstrap /,Todo-Mvvmcross /,Views /,DebugTrace.cs和Setup.cs。
  4. nuget安装程序目前存在一些限制,需要对项目文件进行一些额外的编辑才能处理多个商店平台(x86,ARM和x64),请参阅'Cirrius.Mvvmcross.Community.Plugins.SQLite.WindowsStore需要平台有关详细信息,请参阅Stack Overflow上的X86和ARM'的特定dll。确保将Choose语句放在默认的SQLite.WindowsStore引用之后,并且需要在项目文件中保留默认引用。您还需要根据引用的位置/名称调整HintPath。
  5. 通过显式调用工厂并创建数据服务的新实例来初始化SQLite数据服务:

        var factory = new MvxStoreSQLiteConnectionFactory();
        IMyDataService repository = new MyDataService(factory);
    
  6. 然后我可以访问数据服务,而没有与mvvmcross相关的其他开销。