我使用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的?
发布于 2020-06-17 18:13:05
请查找示例代码:
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中新获取,必须根据需要进行管理。
发布于 2019-02-08 10:25:57
我认为你对反应式编程还是新手。理解基本原则有助于使用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()被调用了两次:
使用这种方法,您可以简单地将存储库类放置在IoC容器中。
https://stackoverflow.com/questions/53574294
复制相似问题