我正在尝试在 Windows 通用应用程序中使用 Akavache(目前为 8.1,使用 ReactiveUI 6.5)。
为了确保它与我的架构无关,我做了一个空的解决方案,其中包含所有必要的包和要求(两个平台的 VC++),但我仍然遇到同样的问题。这对我来说是一个障碍,因为我希望我的所有查询都被缓存。
这是代码:
BlobCache.ApplicationName = "MyApp"; // In AppBootstrapper`
// In My ViewModel
SubmitCommand = ReactiveCommand.CreateAsyncTask(async _ =>
{
var isTrue = await BlobCache.UserAccount.GetOrFetchObject("login_credentials",
async () => await Task.FromResult(true)
);
// My Code never goes further than this
if (!isTrue)
{
throw new Exception("I'm false!");
}
return isTrue;
});
SubmitCommand.Subscribe(isTrue => {
Debug.WriteLine("I got a new value!");
});
SubmitCommand.ThrownExceptions.Subscribe(ex => {
UserError.Throw(ex.Message, ex);
});
// In The View
ViewModel = new MainPageViewModel();
this.BindCommand(ViewModel, x => x.SubmitCommand, x => x.SubmitCommand);
public MainPageViewModel ViewModel
{
get { return (MainPageViewModel)GetValue(ViewModelProperty); }
set { SetValue(ViewModelProperty, value); }
}
public static readonly DependencyProperty ViewModelProperty =
DependencyProperty.Register("ViewModel", typeof(MainPageViewModel), typeof(MainPage), new PropertyMetadata(null));
object IViewFor.ViewModel
{
get { return ViewModel; }
set { ViewModel = (MainPageViewModel)value; }
}
编辑经过一些调试,Windows Phone 8.1 Silverlight 可以工作,而不是 Jupiter。
那么缺少什么?
我正在使用 RXUI 6.5(最新)和 Windows Phone 8.1(Jupiter)(共享通用项目)
更新:Akavache.Sqlite3 导致问题。InMemoryCache 正在工作(删除 Akavache.Sqlite3 “修复”了问题),但不是 Sqlite3。此外,注册 BlobCache 的不同类型的缓存(从https://github.com/akavache/Akavache/blob/3c1431250ae94d25cf7ac9637528f4445b131317/Akavache.Sqlite3/Registrations.cs#L32复制粘贴)显然正在工作。所以我想注册类是'工作不正常,呼叫
new Akavache.Sqlite3.Registrations().Register(Locator.CurrentMutable);
不工作。
编辑: 我的临时解决方案是将其复制粘贴到我的应用程序中,然后在 BlobCache.ApplicationName 之后调用它。它有效,但从技术上讲,我不应该这样做。
谢谢你的帮助