如何订阅 Akavache 中的新值?
How to subscribe new value in Akavache?
我正在使用 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;
它 works.But 我如何使用 interface/dependency 服务在服务层上调用订阅?
我认为你是响应式编程的新手。了解基本原理有助于使用 Akavache。也许 this intro 有帮助。
要回答您的问题,请将这样的代码放入您的 "repository" class:
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()
被调用了两次:
- 首先使用缓存中的 MyClass
- 然后使用(从服务器)获取的 MyClass
使用这种方法,您可以简单地将存储库 class 放入您的 IoC 容器中。
请查找示例代码:
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;
请注意,订阅中的任何内容都会被调用两次:第一组数据将被缓存,第二组数据将从 server.You 中重新获取,必须根据需要进行管理。
我正在使用 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;
它 works.But 我如何使用 interface/dependency 服务在服务层上调用订阅?
我认为你是响应式编程的新手。了解基本原理有助于使用 Akavache。也许 this intro 有帮助。
要回答您的问题,请将这样的代码放入您的 "repository" class:
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()
被调用了两次:
- 首先使用缓存中的 MyClass
- 然后使用(从服务器)获取的 MyClass
使用这种方法,您可以简单地将存储库 class 放入您的 IoC 容器中。
请查找示例代码:
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;
请注意,订阅中的任何内容都会被调用两次:第一组数据将被缓存,第二组数据将从 server.You 中重新获取,必须根据需要进行管理。