在我的Blazor应用程序中,我试图确定安卓或iOS设备的可用存储量。
我在这里找到了一个相关的答案:
Can I check available storage in the Device on Xamarin Forms?
根据已获接受的答案,我已实施以下措施:
定义Blazor项目中的接口
public interface IStorage
{
double GetRemainingStorage();
}在Android项目中创建了一个类。
[assembly: Xamarin.Forms.Dependency(typeof(AndroidStorageManager))]
namespace MyApp.Android
{
public class AndroidStorageManager : IStorage
{
public double GetRemainingStorage()
{
var freeSpace = Android.OS.Environment.ExternalStorageDirectory.UsableSpace;
return freeSpace;
}
}
}在iOS项目中创建一个类
[assembly: Xamarin.Forms.Dependency(typeof(iOSStorageManager))]
namespace MyApp.iOS
{
public class iOSStorageManager : IStorage
{
public double GetRemainingStorage()
{
var freeSpace = NSFileManager.DefaultManager.GetFileSystemAttributes(Environment.GetFolderPath(Environment.SpecialFolder.Personal)).FreeSize;
return freeSpace;
}
}
}问题
尽管使用[assembly:属性定义了依赖项,但当我的Blazor应用程序试图注入IStorage实例时,它会抛出一个异常:
无法解析“IStorage”类型的服务。
当然,我无法在启动时定义IService的依赖项注入,因为AndroidStorageManager和iOSStorageManager是在设备特定的项目中定义的,这些项目已经引用了Blazor应用程序。
我怀疑我需要在安卓和iOS应用程序中为iOS定义DI的其他方法,但我看不出该如何做。
有人能给我建议吗?
发布于 2021-08-20 09:59:37
我似乎已经找到了解决我眼前问题的办法,但我确信肯定会有一个更优雅的解决方案。
当试图注入与IStorage接口关联的类的实例时,会生成异常。
public class MyManager {
private IStorage _storage;
public MyManager(IStorage storage) {
_storage = storage;
}
...
}我可以使用Xamarin.Forms DI手动注入一个实例,而不是依赖Blazor来解决这个依赖关系,如下所示:
public class MyManager {
private IStorage _storage;
public MyManager() {
_storage = DependencyService.Get<IStorage>();
}
...
}我假设我的原始代码无法工作,因为Xamarin.Forms和Blazor没有共享同一个DI容器。我没有把握。
我对任何能提出更优雅的解决方案的人都感兴趣。
https://stackoverflow.com/questions/68855428
复制相似问题