diff --git a/AsyncImageLoader.Avalonia/Loaders/BaseWebImageLoader.cs b/AsyncImageLoader.Avalonia/Loaders/BaseWebImageLoader.cs
index 975f868..f6fac42 100644
--- a/AsyncImageLoader.Avalonia/Loaders/BaseWebImageLoader.cs
+++ b/AsyncImageLoader.Avalonia/Loaders/BaseWebImageLoader.cs
@@ -50,7 +50,7 @@ public void Dispose() {
}
///
- public async Task ProvideImageAsync(string url, IStorageProvider? storageProvider = null) {
+ public virtual async Task ProvideImageAsync(string url, IStorageProvider? storageProvider = null) {
return await LoadAsync(url, storageProvider).ConfigureAwait(false);
}
diff --git a/AsyncImageLoader.Avalonia/Loaders/RamCachedWebImageLoader.cs b/AsyncImageLoader.Avalonia/Loaders/RamCachedWebImageLoader.cs
index f5e3f45..284bf48 100644
--- a/AsyncImageLoader.Avalonia/Loaders/RamCachedWebImageLoader.cs
+++ b/AsyncImageLoader.Avalonia/Loaders/RamCachedWebImageLoader.cs
@@ -2,6 +2,7 @@
using System.Net.Http;
using System.Threading.Tasks;
using Avalonia.Media.Imaging;
+using Avalonia.Platform.Storage;
namespace AsyncImageLoader.Loaders;
@@ -29,6 +30,14 @@ public RamCachedWebImageLoader(HttpClient httpClient, bool disposeHttpClient) :
return bitmap;
}
+ public override async Task ProvideImageAsync(string url, IStorageProvider? storageProvider = null) {
+ var bitmap = await _memoryCache.GetOrAdd(url, x => LoadAsync(x, storageProvider)).ConfigureAwait(false);
+ // If load failed - remove from cache and return
+ // Next load attempt will try to load image again
+ if (bitmap == null) _memoryCache.TryRemove(url, out _);
+ return bitmap;
+ }
+
public void ClearRamCache() {
_memoryCache.Clear();
}