Как подписать новое значение в Акаваче? - PullRequest
0 голосов
/ 01 декабря 2018

Я использую метод GetAndFetchLatest от Akavache и создал службы зависимостей для связи с методом 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;

Это работает. Но как я называю подписку на сервисном уровне с помощью интерфейса / службы зависимостей?

1 Ответ

0 голосов
/ 08 февраля 2019

Я думаю, что вы новичок в реактивном программировании.Понимание основных принципов помогает при использовании 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.

...