1

我正在使用 Akavache 的 GetAndFetchLatest 方法,并且我创建了依赖服务来与 Akavache 的方法进行通信。当我直接引用时,我成功地从服务层调用了 akavache。订阅

  MyMod result = null;
                var cache = BlobCache.LocalMachine;
                var cachedPostsPromise = cache.GetAndFetchLatest(
                    "mykey",
                    () => GetInfo(),
                    offset =>
                    {
                      //some condition
                    });

                    cachedPostsPromise.Subscribe(subscribedPosts => {
                        Device.BeginInvokeOnMainThread(() =>
                        {
                           //do sothing.

                        });
                });

                result = await cachedPostsPromise.FirstOrDefaultAsync();
                return result;

它可以工作。但是我如何使用接口/依赖服务在服务层上调用订阅?

4

2 回答 2

0

我认为您是响应式编程的新手。了解基本原理有助于使用 Akavache。也许这个介绍有帮助。

要回答您的问题,请将这样的代码放在您的“存储库”类中:

public override IObservable<MyClass> Get(string key)
{
    var cachedObservable = blobCache.GetAndFetchLatest<MyClass>(key,
        () => GetFromServerAsync(key));
    return cachedObservable ;
}

在来电者中:

private void getNewData()
{
    var myClassObservable = myRepository.Get("the key");
    myClassObservable.Subscribe(handleNewMyClass);
}

private void handleNewMyClass(MyClass newClass)
{
    //handle the new class
}

请注意,它handleNewMyClass()被调用了两次:

  1. 首先使用缓存中的 MyClass
  2. 然后使用(从服务器)获取的 MyClass

使用这种方法,您可以简单地将存储库类放在您的 IoC 容器中。

于 2019-02-08T10:25:57.570 回答
0

请找到示例代码:

var result = BlobCache.LocalMachine;
            var cachedPostsPromise = cache.GetAndFetchLatest(
                "mykey",
                () => ViewModelLocator.GetInstance<IYourServiceName>().MethodName(),
                offset =>
                {
                  //some condition
                });

                cachedPostsPromise.Subscribe(subscribedPosts => {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                       //Your piece of code

                    });
            });

            result = await cachedPostsPromise.FirstOrDefaultAsync();
            return result;

请注意,订阅中的任何内容都将被调用两次:第一组数据将被缓存,第二组数据将从服务器中新获取。您必须进行管理。

于 2020-06-17T18:13:05.643 回答