我有一个使用mvvmcross sqlite插件(社区版)的商店应用。此应用程序具有定期后台任务,该任务访问数据库以使数据显示在实时磁贴中。我无法看到如何从后台任务访问此数据库。我想在后台任务中使用mvvmcross sqlite插件,但我不知道如何正确初始化mvvmcross环境。
答案 0 :(得分:1)
如果您想要初始化包含所有应用的完整MvvmCross框架,那么您需要运行Setup
课程。
在WinRT中,这可以像调用一样简单:
var setup = new Setup(null /*rootFrame*/);
setup.Initialize();
虽然可能需要你做一些工作:
rootFrame
提供一些其他方法来创建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();
}
}
如果您想初始化的功能少于整个框架(例如出于内存原因),那么您还可以考虑为后台任务创建特殊的Setup
和App
类。
除了&GT;这类似于Android中的问题 - Using MvvmCross from content providers and activities和MvvmCross initialization
答案 1 :(得分:1)
我能够以直截了当的方式解决问题。由于后台任务只需要来自PCL核心项目的SQLite数据服务,我做了以下几点:
通过显式调用工厂并创建数据服务的新实例来初始化SQLite数据服务:
var factory = new MvxStoreSQLiteConnectionFactory();
IMyDataService repository = new MyDataService(factory);
然后我可以访问数据服务,而没有与mvvmcross相关的其他开销。