1

我正在尝试在 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 之后调用它。它有效,但从技术上讲,我不应该这样做。

谢谢你的帮助

4

0 回答 0