我目前正在使用MvvmCross DownloadCache - 它工作正常 - 特别好,当我只需要放入一个图像URL并自动下载/缓存图像并提供UIImage。
我希望将代码用于另一个用例 - 我想从URL获取源图像并将文件缓存在本地文件系统上,但我真正想要的其他用例是本地文件系统上的图像路径而不是UIImage本身。
如果我能得到一个如何实现这一目标的例子,对我最有帮助的是什么。是否有可能在PCL中实现,或者是否需要进入特定于平台的代码?
答案 0 :(得分:2)
谢谢 - 这是有效的,但为了防止其他人跟进,我想记录我是如何让Mvx.Resolve<IMvxFileDownloadCache>()
工作的。在我的setup.cs中(在触摸项目中),我有:
protected override void InitializeLastChance ()
{
Cirrious.MvvmCross.Plugins.DownloadCache.PluginLoader.Instance.EnsureLoaded();
Cirrious.MvvmCross.Plugins.File.PluginLoader.Instance.EnsureLoaded();
Cirrious.MvvmCross.Plugins.Json.PluginLoader.Instance.EnsureLoaded();
...
}
但这还不够,因为实际上没有任何内容在DownloadCache插件中注册IMvxFileDownloadCache
(我原以为是这样,但事实并非如此)。
然后我尝试在这里添加这一行:
Mvx.LazyConstructAndRegisterSingleton<IMvxFileDownloadCache, MvxFileDownloadCache>();
但是失败了,因为MvxFileDownloadCache构造函数需要一些参数。所以我最终得到了这个:
protected override void InitializeLastChance ()
{
...
var configuration = MvxDownloadCacheConfiguration.Default;
var fileDownloadCache = new MvxFileDownloadCache(
configuration.CacheName,
configuration.CacheFolderPath,
configuration.MaxFiles,
configuration.MaxFileAge);
Mvx.RegisterSingleton<IMvxFileDownloadCache>(fileDownloadCache);
...
}
现在解决方案还可行。
<强>问题:强> 我确实想知道如果两个以完全相同的方式配置的MvxFileDownloadCache对象通过相互踩踏会导致问题会发生什么。我可以通过手动修改我正在构建的缓存名称来避免这个问题,但我确实希望它是一个缓存(资产将是相同的)。
答案 1 :(得分:1)
如果您查看插件的来源,您会找到https://github.com/MvvmCross/MvvmCross/blob/3.2/Plugins/Cirrious/DownloadCache/Cirrious.MvvmCross.Plugins.DownloadCache/IMvxFileDownloadCache.cs - 这将为您提供缓存文件的本地文件路径:
public interface IMvxFileDownloadCache
{
void RequestLocalFilePath(string httpSource, Action<string> success, Action<Exception> error);
}
您可以使用Mvx.Resolve<IMvxFileDownloadCache>()
要将其转换为系统范围的文件路径,请在https://github.com/MvvmCross/MvvmCross/blob/3.2/Plugins/Cirrious/File/Cirrious.MvvmCross.Plugins.File/IMvxFileStore.cs#L27
中尝试NativePath