我正在使用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;
它有效。但是我如何通过接口/依赖服务调用服务层上的订阅?
答案 0 :(得分:0)
我认为您是反应式编程的新手。使用Akavache时,了解基本原理会有所帮助。也许this intro会有所帮助。
要回答您的问题,请将这样的代码放在“存储库”类中:
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()
被调用了两次:
使用这种方法,您只需将存储库类放入IoC容器中即可。
答案 1 :(得分: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;
请注意,已订阅的内部任何内容都将被调用两次:第一组数据将被缓存,第二组数据将从服务器中新获取。您必须进行管理。